0 txs
4.9k calls
constructor
constructor(address _baseToken, address _quoteToken, address[] _reservesEvaluationPath, address _router, uint256 _allowedSingleLossBps, uint256 _allowedCumLossBps, uint256 _expectedGasBurn, address _strategy, address _financier, address[] _gatewayExecutors, address _manager, bool _isFlex)
functions
allowedCumLossBps
viewfunction allowedCumLossBps() view returns (uint256)
allowedSingleLossBps
viewfunction allowedSingleLossBps() view returns (uint256)
baseToken
viewfunction baseToken() view returns (address)
currentCumLossBps
viewfunction currentCumLossBps() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
expectedGasBurn
viewfunction expectedGasBurn() view returns (uint256)
FINANCIER_ROLE
viewfunction FINANCIER_ROLE() view returns (bytes32)
GATEWAY_EXECUTOR_ROLE
viewfunction GATEWAY_EXECUTOR_ROLE() view returns (bytes32)
gatewayExecutors
viewfunction gatewayExecutors(uint256) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getVaultReserves
viewfunction getVaultReserves() view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isFlex
viewfunction isFlex() view returns (bool)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
MAX_ALLOWED_CUM_LOSS_BPS
viewfunction MAX_ALLOWED_CUM_LOSS_BPS() view returns (uint256)
MAX_ALLOWED_SINGLE_LOSS_BPS
viewfunction MAX_ALLOWED_SINGLE_LOSS_BPS() view returns (uint256)
quoteToken
viewfunction quoteToken() view returns (address)
reservesEvaluationPath
viewfunction reservesEvaluationPath(uint256) view returns (address)
router
viewfunction router() view returns (address)
strategy
viewfunction strategy() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
version
viewfunction version() view returns (string)
addGatewayExecutor
nonpayablefunction addGatewayExecutor(address _executor)
execute
nonpayablefunction execute(uint256 _baseTokenAmount, uint256 _quoteTokenAmount, bytes _params)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removeGatewayExecutor
nonpayablefunction removeGatewayExecutor(address _executor)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
replenishExecutorsWei
nonpayablefunction replenishExecutorsWei(uint256 _minWei)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAllowedLoss
nonpayablefunction setAllowedLoss(uint256 _allowedSingleLossBps, uint256 _allowedCumLossBps)
setExpectedGasBurn
nonpayablefunction setExpectedGasBurn(uint256 _expectedGasBurn)
setStrategy
nonpayablefunction setStrategy(address _strategy)
updateConfig
nonpayablefunction updateConfig(address _baseToken, address _quoteToken, address[] _reservesEvaluationPath, address _router, bool _isFlex)
withdraw
nonpayablefunction withdraw(address token, uint256 amount)
events
AllowedLossUpdated
event AllowedLossUpdated(uint256 allowedSingleLossBps, uint256 allowedCumLossBps)
ExecResult
event ExecResult(int256 baseTokenBalanceChange, int256 quoteTokenBalanceChange, int256 totalUsdValueChange)
ExpectedGasBurnUpdated
event ExpectedGasBurnUpdated(uint256 newExpectedGasBurn)
GatewayExecutorAdded
event GatewayExecutorAdded(address executor)
GatewayExecutorRemoved
event GatewayExecutorRemoved(address executor)
PostExecState
event PostExecState((uint256 baseTokenBalance, uint256 baseTokenUsdValue, uint256 quoteTokenBalance, uint256 quoteTokenUsdValue, uint256 totalUsdValue))
PreExecState
event PreExecState((uint256 baseTokenBalance, uint256 baseTokenUsdValue, uint256 quoteTokenBalance, uint256 quoteTokenUsdValue, uint256 totalUsdValue))
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
StrategyUpdated
event StrategyUpdated(address previousStrategy, address newStrategy)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052346106af57612caa80380380610019816106b3565b9283398101610180828203126106af57610032826106d8565b9061003f602084016106d8565b60408401519091906001600160401b0381116106af57816100619186016106ec565b60608501516001600160a01b0381169391908490036106af57608086015160a08701519160c08801519561009760e08a016106d8565b946100a56101008b016106d8565b6101208b015190976001600160401b0382116106af576100c6918c016106ec565b986101606100d76101408d016106d8565b9b01518015158091036106af5760ff8019600b5416911617600b5560018060a01b03169060018060a01b03169080156106755781156106305782156105fa578181146105b55760018060a01b0319600254161760025560018060a01b0319600354161760035560018060a01b031960065416176006556101568161077e565b8051906001600160401b0382116103a5576801000000000000000082116103a55760045482600455808310610571575b5060200160045f5260205f205f5b83811061055457505050506064811161050f576103e882116104ca57600755600855600180546001600160a01b0319166001600160a01b039290921691909117905562030d4082111561048557600a919091555f516020612c8a5f395f51905f525f81815260208190527f2bb34ae2735a2a24e631574d4551a8f6e60de72beec501fa70aaf851dfd976d380545f516020612c4a5f395f51905f52918290556102f7949391929091905f516020612bca5f395f51905f529080a45f516020612c4a5f395f51905f525f81815260208190527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee6468054908390559082905f516020612bca5f395f51905f529080a45f516020612bea5f395f51905f525f81815260208190527fe2f2c6e29c3eb8e983006f8cb0c03f13b20c1e617de53a0bb5d2a054dd630a2f8054908390559082905f516020612bca5f395f51905f529080a46108d9565b505f5b815181101561046c576001600160a01b036103158284610756565b5116908115610427576005545f5b8181106103b95750506103358261095e565b5060055491680100000000000000008310156103a55760207f41f9cd469b89708d37a9c08125ded9f3880e39d6a15e94ea05816bb9b4b232fb91610380856001809701600555610a5e565b81549060031b9083821b91888060a01b03901b1916179055604051908152a1016102fa565b634e487b7160e01b5f52604160045260245ffd5b836103c382610a5e565b905460039190911b1c6001600160a01b0316146103e257600101610323565b60405162461bcd60e51b815260206004820152601760248201527f4558454355544f525f414c52454144595f4558495354530000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4558454355544f525f4144445245535300000000000000006044820152606490fd5b610475836109de565b506040516121339081610a778239f35b60405162461bcd60e51b815260206004820152601960248201527f45585045435445445f4741535f4255524e5f544f4f5f4c4f57000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f414c4c4f5745445f43554d5f4c4f53535f4f5645525f4d4158000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f414c4c4f5745445f53494e474c455f4c4f53535f4f5645525f4d4158000000006044820152606490fd5b82516001600160a01b031681830155602090920191600101610194565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9081019083015b8181106105aa5750610186565b5f815560010161059d565b60405162461bcd60e51b815260206004820152601460248201527f424153455f414e445f51554f54455f455155414c0000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d1493d555115497d393d517d4d15560921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601360248201527f51554f54455f544f4b454e5f4e4f545f534554000000000000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271109054d157d513d2d15397d393d517d4d15560721b6044820152606490fd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176103a557604052565b51906001600160a01b03821682036106af57565b9080601f830112156106af578151916001600160401b0383116103a5578260051b9060208061071c8185016106b3565b8096815201928201019283116106af57602001905b82821061073e5750505090565b6020809161074b846106d8565b815201910190610731565b805182101561076a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9060ff600b54166108d55760025460035491926001600160a01b03928316929091165f5b82518110156108cf576001600160a01b036107bd8285610756565b51161561088a57816001600160a01b036107d78386610756565b51161461084557836001600160a01b036107f18386610756565b511614610800576001016107a2565b60405162461bcd60e51b815260206004820152601e60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f51554f544500006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f424153450000006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f5a45524f0000006044820152606490fd5b50505050565b9050565b6001600160a01b0381165f9081525f516020612c2a5f395f51905f52602052604090205460ff16610959576001600160a01b03165f8181525f516020612c2a5f395f51905f5260205260408120805460ff191660011790553391905f516020612bea5f395f51905f52905f516020612baa5f395f51905f529080a4600190565b505f90565b6001600160a01b0381165f9081525f516020612c0a5f395f51905f52602052604090205460ff16610959576001600160a01b03165f8181525f516020612c0a5f395f51905f5260205260408120805460ff191660011790553391905f516020612c8a5f395f51905f52905f516020612baa5f395f51905f529080a4600190565b6001600160a01b0381165f9081525f516020612c6a5f395f51905f52602052604090205460ff16610959576001600160a01b03165f8181525f516020612c6a5f395f51905f5260205260408120805460ff191660011790553391905f516020612c4a5f395f51905f52905f516020612baa5f395f51905f529080a4600190565b60055481101561076a5760055f5260205f2001905f9056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c90816301ffc9a71461128a57508063217a4b7014611262578063248a9ca3146112305780632f2ff15d146111f3578063327bb719146110fb57806333a100ca14610fc657806336568abe14610f825780633dba3b2314610f595780634462296f14610ebc5780634dd05b2214610e7a5780634ea65c9114610e5e5780634f69919814610e375780634f9968f914610e1a57806354fd4d5014610db65780635d13a8e614610d995780636156673a14610d5f578063738fdcc314610d425780638774d9d514610d1757806391d1485414610ccf578063a217fddf14610cb5578063a8c62e7614610c8d578063b81e2ace14610b18578063c55dae6314610af0578063cad5478414610a49578063d1ae60f614610a2c578063d547741f146109ea578063db084caf146108b9578063e7e1666414610897578063ec87621c1461085d578063f3fef3a3146107d2578063f693fc1f146107b7578063f887ea401461078f578063f8bca706146104755763ff72ccf11461019e575f61000f565b346104715760603660031901126104715760443567ffffffffffffffff8111610471573660238201121561047157806004013567ffffffffffffffff811161047157366024828401011161047157335f9081525f5160206120be5f395f51905f52602052604090205460ff161561044d576002546001547f74254a28fa032a14b87efdcce8109c38d3ef0525f6b00e73af770d03b32f768b9360609390926103229261025a91600435916001600160a01b039081169116611b6a565b60035460015461027a91602435916001600160a01b039081169116611b6a565b5f806102846114f4565b947fa24276dd7cd6d7ded5739bbdaaf317d56641e13f70be4c1ea5a45289e731b7d0604051806102b489826113a7565b0390a16001546001600160a01b0316938260206102d08361138b565b926102de6040519485611369565b8084528060248386019601863783010152519082855af13d15610446573d916103068361138b565b926103146040519485611369565b83523d5f602085013e61205f565b5061032b6114f4565b60ff600b541615610437575b7f86316d75491416c30ad8a6c0cfafa933e87e1e003c18f8b56947f75b80ef85186040518061036684826113a7565b0390a161039c6103798251845190611868565b926080806103906040860151604085015190611868565b94015191015190611868565b9060405192835260208301526040820152a16103bb600a543a90611855565b5f5b60055481101561001a576103d081611309565b905460039190911b1c6001600160a01b031680318381106103f6575b50506001016103bd565b6104009084611d86565b9081471061001a575f808093819382821561042e575bf115610423575f806103ec565b6040513d5f823e3d90fd5b506108fc610416565b6104418183611eee565b610337565b849161205f565b63e2517d3f60e01b5f52336004525f5160206120de5f395f51905f5260245260445ffd5b5f80fd5b346104715760a03660031901126104715761048e6112f3565b6104966112dd565b60443567ffffffffffffffff81116104715736602382011215610471578060040135916104c2836113db565b916104d06040519384611369565b83835260208301906024829560051b8201019036821161047157602401915b81831061076f575050506064356001600160a01b03811691908290036104715760843594851515809603610471576105256118ef565b6001600160a01b03918216911680156107355781156106fa5782156106c457818114610688576001600160601b0360a01b60025416176002556001600160601b0360a01b60035416176003556001600160601b0360a01b600654161760065561058d81611d93565b519067ffffffffffffffff821161067457600160401b82116106745760045482600455808310610616575b5060045f525f5b8281106105d9578360ff8019600b5416911617600b555f80f35b81516001600160a01b03167f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b8201556020909101906001016105bf565b7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01827f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015b81811061066957506105b8565b5f815560010161065c565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b8152602060048201526014602482015273109054d157d0539117d45553d51157d15455505360621b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d1493d555115497d393d517d4d15560921b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272145553d51157d513d2d15397d393d517d4d155606a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271109054d157d513d2d15397d393d517d4d15560721b6044820152606490fd5b82356001600160a01b0381168103610471578152602092830192016104ef565b34610471575f366003190112610471576006546040516001600160a01b039091168152602090f35b34610471575f36600319011261047157602060405160648152f35b34610471576040366003190112610471576107eb6112f3565b602435906107f7611880565b6001600160a01b03168061082657505f8080809381811561081d575b3390f11561042357005b506108fc610813565b60405163a9059cbb60e01b602082015233602482015260448082019390935291825261001a9190610858606483611369565b612007565b34610471575f3660031901126104715760206040517f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088152f35b34610471575f36600319011261047157602060ff600b54166040519015158152f35b34610471576020366003190112610471576108d26112f3565b6108da6118ef565b6001600160a01b038116906108f0821515611d3a565b6005545f5b81811061097c57505061090781611996565b5060055491600160401b8310156106745761097360209261094f8560017f41f9cd469b89708d37a9c08125ded9f3880e39d6a15e94ea05816bb9b4b232fb9701600555611309565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b604051908152a1005b8361098682611309565b905460039190911b1c6001600160a01b0316146109a5576001016108f5565b60405162461bcd60e51b815260206004820152601760248201527f4558454355544f525f414c52454144595f4558495354530000000000000000006044820152606490fd5b346104715760403660031901126104715761001a600435610a096112dd565b90610a27610a22825f525f602052600160405f20015490565b61195e565b611cba565b34610471575f366003190112610471576020600854604051908152f35b3461047157602036600319011261047157600435610a656118ef565b8015610add575b5f5b60055481101561001a57610a8181611309565b905460039190911b1c6001600160a01b03168031838110610aa7575b5050600101610a6e565b610ab19084611d86565b9081471061001a575f8080938193828215610ad4575bf115610423578280610a9d565b506108fc610ac7565b50610aeb600a543a90611855565b610a6c565b34610471575f366003190112610471576002546040516001600160a01b039091168152602090f35b3461047157602036600319011261047157610b316112f3565b610b396118ef565b6001600160a01b03811690610b5890610b53831515611d3a565b611c29565b505f5f5b60055480821015610c865783610b7183611309565b905460039190911b1c6001600160a01b031614610b915750600101610b5c565b5f19810192508211610c725761094f610bac610bc493611309565b905460039190911b1c6001600160a01b031691611309565b6005548015610c5e575f1901610bd981611309565b81549060018060a01b039060031b1b1916905560055560015b15610c245760207f660e976f341525a7b550cc60ed47948db0185fc2c79bf02d85322646019193e091604051908152a1005b60405162461bcd60e51b815260206004820152601260248201527111561150d55513d497d393d517d193d5539160721b6044820152606490fd5b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5050610bf2565b34610471575f366003190112610471576001546040516001600160a01b039091168152602090f35b34610471575f3660031901126104715760206040515f8152f35b3461047157604036600319011261047157610ce86112dd565b6004355f525f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610471575f36600319011261047157610d3e610d326114f4565b604051918291826113a7565b0390f35b34610471575f366003190112610471576020600754604051908152f35b34610471575f3660031901126104715760206040517f90ae81e350820d4cceeb313af90be8da2e3c8d05e7cdbd321e6dbc055898ea008152f35b34610471575f366003190112610471576020600a54604051908152f35b34610471575f366003190112610471576040805190610dd58183611369565b600b825260208201916a0ec605c625c665accd8caf60ab1b83528151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b34610471575f366003190112610471576020600954604051908152f35b34610471575f3660031901126104715760206040515f5160206120de5f395f51905f528152f35b34610471575f3660031901126104715760206040516103e88152f35b346104715760203660031901126104715760043560045481101561047157610ea3602091611335565b905460405160039290921b1c6001600160a01b03168152f35b3461047157602036600319011261047157600435610ed86118ef565b62030d40811115610f14576020817f0a6f44ad057a88cb1f27ff049d2e7a72a633425755d3db25a59279e32078985192600a55604051908152a1005b60405162461bcd60e51b815260206004820152601960248201527f45585045435445445f4741535f4255524e5f544f4f5f4c4f57000000000000006044820152606490fd5b346104715760203660031901126104715760043560055481101561047157610ea3602091611309565b3461047157604036600319011261047157610f9b6112dd565b336001600160a01b03821603610fb75761001a90600435611cba565b63334bd91960e11b5f5260045ffd5b3461047157602036600319011261047157610fdf6112f3565b610fe76118ef565b6001600160a01b031680156110c4576001546001600160a01b031681811461108f577fe4cec16b1a7e6b7979e923da619a8b1e5fd0f0fb6e5c1cf647f350430ee61ca99181604092611057575b50806001600160601b0360a01b60015416176001558151908082526020820152a1005b60025461106d91906001600160a01b0316611ab6565b600354600154611089916001600160a01b039182169116611ab6565b83611034565b60405162461bcd60e51b815260206004820152600d60248201526c53414d455f535452415445475960981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e14d51490551151d657d393d514d155608a1b6044820152606490fd5b346104715760403660031901126104715760043560243561111a611880565b606482116111ae576103e8811161116957816040917fdea087f87aaa88fdf7631289bccbbe9b4cc03375a362150c2014db6789d58e3d93600755806008555f60095582519182526020820152a1005b60405162461bcd60e51b815260206004820152601960248201527f414c4c4f5745445f43554d5f4c4f53535f4f5645525f4d4158000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f414c4c4f5745445f53494e474c455f4c4f53535f4f5645525f4d4158000000006044820152606490fd5b346104715760403660031901126104715761001a6004356112126112dd565b9061122b610a22825f525f602052600160405f20015490565b611a2e565b3461047157602036600319011261047157602061125a6004355f525f602052600160405f20015490565b604051908152f35b34610471575f366003190112610471576003546040516001600160a01b039091168152602090f35b34610471576020366003190112610471576004359063ffffffff60e01b821680920361047157602091637965db0b60e01b81149081156112cc575b5015158152f35b6301ffc9a760e01b149050836112c5565b602435906001600160a01b038216820361047157565b600435906001600160a01b038216820361047157565b6005548110156113215760055f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6004548110156113215760045f5260205f2001905f90565b60a0810190811067ffffffffffffffff82111761067457604052565b90601f8019910116810190811067ffffffffffffffff82111761067457604052565b67ffffffffffffffff811161067457601f01601f191660200190565b91909160808060a0830194805184526020810151602085015260408101516040850152606081015160608501520151910152565b67ffffffffffffffff81116106745760051b60200190565b91908201809211610c7257565b8051156113215760200190565b8051600110156113215760400190565b80518210156113215760209160051b010190565b6020818303126104715780519067ffffffffffffffff821161047157019080601f83011215610471578151611465816113db565b926114736040519485611369565b81845260208085019260051b82010192831161047157602001905b82821061149b5750505090565b815181526020918201910161148e565b6060602091604081019381526040838201528451809452019201905f5b8181106114d55750505090565b82516001600160a01b03168452602093840193909201916001016114c8565b5f60806040516115038161134d565b828152826020820152826040820152826060820152015260018060a01b0360025416604051906370a0823160e01b8252306004830152602082602481845afa918215610423575f92611821575b506003546040516370a0823160e01b81523060048201526001600160a01b039091169190602081602481865afa908115610423575f916117ef575b505f925f9260ff600b5416156115cf575b50506115a882846113f3565b92604051946115b68661134d565b8552602085015260408401526060830152608082015290565b90919260045480155f146116a0575050604051916115ee606084611369565b6002835260403660208501378161160484611400565b5261160e8361140d565b5284611620575b5050805b5f8061159c565b61165a929350905f9161163282611400565b5260018060a01b0360065416604051808095819463d06ca61f60e01b835289600484016114ab565b03915afa801561042357611675915f9161167e575b5061140d565b51905f80611615565b61169a91503d805f833e6116928183611369565b810190611431565b5f61166f565b91600183959492950192838111610c72576116ba846113db565b936116c86040519586611369565b8085526116d7601f19916113db565b013660208601375f5b8181106117b75750508661175a575b50826116fd575b5050611619565b611737929350905f9161170f82611400565b5260018060a01b0360065416604051808095819463d06ca61f60e01b835288600484016114ab565b03915afa801561042357611751915f9161167e575061140d565b51905f806116f6565b90945061176682611400565b5260065460405163d06ca61f60e01b8152905f9082906001600160a01b03168180611795878c600484016114ab565b03915afa8015610423576117af915f9161167e575061140d565b51935f6116ef565b6117c081611335565b905460018301929160031b1c6001600160a01b0316828211610c72576117e86001938861141d565b52016116e0565b90506020813d602011611819575b8161180a60209383611369565b8101031261047157515f61158b565b3d91506117fd565b9091506020813d60201161184d575b8161183d60209383611369565b810103126104715751905f611550565b3d9150611830565b81810292918115918404141715610c7257565b81810392915f138015828513169184121617610c7257565b335f9081527fe2f2c6e29c3eb8e983006f8cb0c03f13b20c1e617de53a0bb5d2a054dd630a2e602052604090205460ff16156118b857565b63e2517d3f60e01b5f52336004527f90ae81e350820d4cceeb313af90be8da2e3c8d05e7cdbd321e6dbc055898ea0060245260445ffd5b335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff161561192757565b63e2517d3f60e01b5f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b5f8181526020818152604080832033845290915290205460ff16156119805750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081525f5160206120be5f395f51905f52602052604090205460ff16611a29576001600160a01b03165f8181525f5160206120be5f395f51905f5260205260408120805460ff191660011790553391905f5160206120de5f395f51905f52907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16611ab0575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b6040519060205f8184019463095ea7b360e01b865260018060a01b03169485602486015281604486015260448552611aef606486611369565b84519082855af15f513d82611b45575b505015611b0b57505050565b610858611b43936040519063095ea7b360e01b602083015260248201525f604482015260448152611b3d606482611369565b82612007565b565b909150611b6257506001600160a01b0381163b15155b5f80611aff565b600114611b5b565b60405163095ea7b360e01b60208083019182526001600160a01b0385166024840152604480840196909652948252929390925f90611ba9606486611369565b84519082855af15f513d82611c04575b505015611bc557505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f6044808501919091528352611b439261085890611b3d606482611369565b909150611c2157506001600160a01b0381163b15155b5f80611bb9565b600114611c1a565b6001600160a01b0381165f9081525f5160206120be5f395f51905f52602052604090205460ff1615611a29576001600160a01b03165f8181525f5160206120be5f395f51905f5260205260408120805460ff191690553391905f5160206120de5f395f51905f52907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1615611ab0575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b15611d4157565b60405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4558454355544f525f4144445245535300000000000000006044820152606490fd5b91908203918211610c7257565b9060ff600b5416611eea5760025460035491926001600160a01b03928316929091165f5b8251811015611ee4576001600160a01b03611dd2828561141d565b511615611e9f57816001600160a01b03611dec838661141d565b511614611e5a57836001600160a01b03611e06838661141d565b511614611e1557600101611db7565b60405162461bcd60e51b815260206004820152601e60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f51554f544500006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f424153450000006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f4556414c554154494f4e5f504154485f434f4e5441494e535f5a45524f0000006044820152606490fd5b50505050565b9050565b60ff600b5416612003576080019060808251910151808211611f0f57505050565b611f1891611d86565b906127108202918083046127101490151715610c725751908115611fef57046001808211911802600118611f4e816009546113f3565b908160095560075410611faa5760085410611f6557565b60405162461bcd60e51b815260206004820152601860248201527f43554d5f4c4f53535f455843454544535f414c4c4f57454400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f53494e474c455f4c4f53535f455843454544535f414c4c4f57454400000000006044820152606490fd5b634e487b7160e01b5f52601260045260245ffd5b5050565b905f602091828151910182855af115610423575f513d61205657506001600160a01b0381163b155b6120365750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561202f565b90612083575080511561207457805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806120b4575b612094575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561208c56fe2bb34ae2735a2a24e631574d4551a8f6e60de72beec501fa70aaf851dfd976d2a1f1febe63796bc957aa10dd4c48bf103ac8464de60b6fce0f5acd6e077de272a264697066735822122059d239adcca4c9dbf6b7decc18a573847d1618caa3c1c04df4a5422a2821264364736f6c634300081d00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff90ae81e350820d4cceeb313af90be8da2e3c8d05e7cdbd321e6dbc055898ea002bb34ae2735a2a24e631574d4551a8f6e60de72beec501fa70aaf851dfd976d2e2f2c6e29c3eb8e983006f8cb0c03f13b20c1e617de53a0bb5d2a054dd630a2e241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08e84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645a1f1febe63796bc957aa10dd4c48bf103ac8464de60b6fce0f5acd6e077de272000000000000000000000000b6fe221fe9eef5aba221c348ba20a1bf5e73624c000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001800000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000016e360000000000000000000000000b81286ea31f201589098585e45160f6edf2f0a050000000000000000000000004e84774e08c979b00fe0f39edca0b1d732d0331000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004e84774e08c979b00fe0f39edca0b1d732d033100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000002b39bf4eb286f87733e60bba17f79818e08358ae0000000000000000000000007d64b40c96f2dae690fd54f9f4f21c569666af48