[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "payment_id", "type": "string" }, { "indexed": false, "internalType": "string", "name": "payment_platform", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "offramper", "type": "address" } ], "name": "OffRamp", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "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": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "_asset", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "max", "type": "uint256" }, { "internalType": "uint256", "name": "min", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "address", "name": "benefactor", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxOnRampAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minDepositAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "paymentProcessor", "type": "string" }, { "internalType": "string", "name": "ppId", "type": "string" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "offramp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "offRamper", "type": "address" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "onramp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "_asset", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "max", "type": "uint256" }, { "internalType": "uint256", "name": "min", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "address", "name": "benefactor", "type": "address" } ], "name": "postUpgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "shareHolder", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sustainabilityFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sustainabilityFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uasset", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "withdrawDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161307262000104600039600081816116fe0152818161172701526118d701526130726000f3fe6080604052600436106102d15760003560e01c806394bf804d11610179578063d905777e116100d6578063ef8b30f71161008a578063f2fde38b11610064578063f2fde38b146107f5578063fb8b799214610815578063fcfb72801461083557600080fd5b8063ef8b30f71461068d578063f071f4fd146107a8578063f224a0f8146107d557600080fd5b8063dd62ed3e116100bb578063dd62ed3e1461070d578063e279d96414610772578063e6a8071f1461078857600080fd5b8063d905777e146106cd578063d9478d20146106ed57600080fd5b8063b460af941161012d578063c63d75b611610112578063c63d75b61461044e578063c6e6f5921461068d578063ce96cb77146106ad57600080fd5b8063b460af941461064d578063ba0876521461066d57600080fd5b8063a9059cbb1161015e578063a9059cbb146105c4578063ad3cb1cc146105e4578063b3d7f6b91461062d57600080fd5b806394bf804d1461058f57806395d89b41146105af57600080fd5b8063402d267d116102325780635a4d30d3116101e657806370a08231116101c057806370a0823114610510578063715018a6146105655780638da5cb5b1461057a57600080fd5b80635a4d30d3146104ba578063645006ca146104da5780636e553f65146104f057600080fd5b80634cdf0392116102175780634cdf0392146104705780634f1ef2861461049257806352d1902d146104a557600080fd5b8063402d267d1461044e5780634cdad5061461032057600080fd5b806318160ddd1161028957806323b872dd1161026e57806323b872dd146103da578063313ce567146103fa57806338d52e0f1461042157600080fd5b806318160ddd14610390578063238c8494146103c457600080fd5b806307a2d13a116102ba57806307a2d13a14610320578063095ea7b3146103405780630a28a4771461037057600080fd5b806301e1d114146102d657806306fdde03146102fe575b600080fd5b3480156102e257600080fd5b506102eb610855565b6040519081526020015b60405180910390f35b34801561030a57600080fd5b50610313610904565b6040516102f5919061286a565b34801561032c57600080fd5b506102eb61033b36600461287d565b6109d9565b34801561034c57600080fd5b5061036061035b3660046128ab565b6109ec565b60405190151581526020016102f5565b34801561037c57600080fd5b506102eb61038b36600461287d565b610a04565b34801561039c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546102eb565b3480156103d057600080fd5b506102eb60045481565b3480156103e657600080fd5b506103606103f53660046128d7565b610a11565b34801561040657600080fd5b5061040f610a37565b60405160ff90911681526020016102f5565b34801561042d57600080fd5b50610436610a86565b6040516001600160a01b0390911681526020016102f5565b34801561045a57600080fd5b506102eb610469366004612918565b5060001990565b34801561047c57600080fd5b5061049061048b3660046129e1565b610abb565b005b6104906104a0366004612a89565b610c1b565b3480156104b157600080fd5b506102eb610c3a565b3480156104c657600080fd5b506104906104d5366004612aed565b610c69565b3480156104e657600080fd5b506102eb60015481565b3480156104fc57600080fd5b506102eb61050b366004612b2f565b610e71565b34801561051c57600080fd5b506102eb61052b366004612918565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b34801561057157600080fd5b50610490610f36565b34801561058657600080fd5b50610436610f4a565b34801561059b57600080fd5b506102eb6105aa366004612b2f565b610f73565b3480156105bb57600080fd5b50610313610f99565b3480156105d057600080fd5b506103606105df3660046128ab565b610fea565b3480156105f057600080fd5b506103136040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561063957600080fd5b506102eb61064836600461287d565b610ff8565b34801561065957600080fd5b506102eb610668366004612aed565b611005565b34801561067957600080fd5b506102eb610688366004612aed565b611089565b34801561069957600080fd5b506102eb6106a836600461287d565b611104565b3480156106b957600080fd5b506102eb6106c8366004612918565b611111565b3480156106d957600080fd5b506102eb6106e8366004612918565b611154565b3480156106f957600080fd5b50600554610436906001600160a01b031681565b34801561071957600080fd5b506102eb610728366004612b5f565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561077e57600080fd5b506102eb60035481565b34801561079457600080fd5b50600254610436906001600160a01b031681565b3480156107b457600080fd5b506102eb6107c3366004612918565b60006020819052908152604090205481565b3480156107e157600080fd5b506104906107f03660046129e1565b611191565b34801561080157600080fd5b50610490610810366004612918565b61120a565b34801561082157600080fd5b50610490610830366004612b2f565b611261565b34801561084157600080fd5b50610490610850366004612b8d565b611463565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190612c0d565b91505090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161095590612c26565b80601f016020809104026020016040519081016040528092919081815260200182805461098190612c26565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505091505090565b60006109e68260006114f2565b92915050565b6000336109fa81858561154b565b5060019392505050565b60006109e682600161155d565b600033610a1f8582856115ac565b610a2a858585611662565b60019150505b9392505050565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e009050600081546108fe919074010000000000000000000000000000000000000000900460ff16612c76565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b546001600160a01b031692915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b065750825b905060008267ffffffffffffffff166001148015610b235750303b155b905081158015610b31575080155b15610b68576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610bb357845468ff00000000000000001916680100000000000000001785555b610bc28c8c8c8c8c8c8c611191565b8315610c0d57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610c236116f3565b610c2c826117c3565b610c3682826117cb565b5050565b6000610c446118cc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610c7161192e565b60008311610cec5760405162461bcd60e51b815260206004820152602260248201527f7769746864726177206d7573742062652067726561746572207468616e205a6560448201527f726f00000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b038116610d425760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610ce3565b6001600160a01b038216600090815260208190526040902054610da75760405162461bcd60e51b815260206004820152601260248201527f4e6f74206120736861726520686f6c64657200000000000000000000000000006044820152606401610ce3565b6001600160a01b038216600090815260208190526040902054831115610e0f5760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768207368617265730000000000000000000000000000006044820152606401610ce3565b6000610e1a846109d9565b9050610e268382611979565b600254610e3e906001600160a01b03163084876119c8565b6001600160a01b03831660009081526020819052604081208054869290610e66908490612c8f565b909155505050505050565b6000610e9760405180606001604052806025815260200161301860259139338585611a44565b60008311610ee75760405162461bcd60e51b815260206004820152601660248201527f4465706f736974206c657373207468616e205a65726f000000000000000000006044820152606401610ce3565b6000610ef38484611abb565b905083600080856001600160a01b03166001600160a01b031681526020019081526020016000206000828254610f299190612ca2565b9091555090949350505050565b610f3e61192e565b610f486000611ad9565b565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610aab565b60006000196000610f8385610ff8565b9050610f9133858388611b57565b949350505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161095590612c26565b6000336109fa818585611662565b60006109e68260016114f2565b60008061101183611111565b905080851115611066576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610ce3565b600061107186610a04565b90506110803386868985611bf6565b95945050505050565b60008061109583611154565b9050808511156110ea576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610ce3565b60006110f5866109d9565b9050611080338686848a611bf6565b60006109e682600061155d565b6001600160a01b03811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546109e69060006114f2565b6001600160a01b03811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546109e6565b600280546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff199283161790925560018590556003869055600484905560058054928416929091169190911790556111e78686611cbd565b6111f087611ccf565b6111f981611ce0565b611201611cf1565b50505050505050565b61121261192e565b6001600160a01b038116611255576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b61125e81611ad9565b50565b61126961192e565b600082116112df5760405162461bcd60e51b815260206004820152602260248201527f7769746864726177206d7573742062652067726561746572207468616e205a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152608401610ce3565b6001600160a01b0381166113355760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610ce3565b6001600160a01b03811660009081526020819052604090205461139a5760405162461bcd60e51b815260206004820152601260248201527f4e6f74206120736861726520686f6c64657200000000000000000000000000006044820152606401610ce3565b6001600160a01b0381166000908152602081905260409020548211156114025760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768207368617265730000000000000000000000000000006044820152606401610ce3565b600061140d836109d9565b90506114198282611979565b600254611431906001600160a01b03163084866119c8565b6001600160a01b03821660009081526020819052604081208054859290611459908490612c8f565b9091555050505050565b6114a46040518060400160405280601881526020017f6f666672616d702066726f6d20257320746f2025732025730000000000000000815250828486611cf9565b6114ae8282610e71565b507f96ca76b94e8cce3317085da1966d0ff7b44bf170f490d943c62a4c8e9db94287838584846040516114e49493929190612cb5565b60405180910390a150505050565b6000610a306114ff610855565b61150a906001612ca2565b6115166000600a612ddf565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546115429190612ca2565b85919085611d70565b6115588383836001611dbf565b505050565b6000610a3061156d82600a612ddf565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546115999190612ca2565b6115a1610855565b611542906001612ca2565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461165c578181101561164d576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610ce3565b61165c84848484036000611dbf565b50505050565b6001600160a01b0383166116a5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b6001600160a01b0382166116e8576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b611558838383611ee2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061178c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125e61192e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611825575060408051601f3d908101601f1916820190925261182291810190612c0d565b60015b611866576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610ce3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146118c2576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ce3565b611558838361204b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33611937610f4a565b6001600160a01b031614610f48576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ce3565b6001600160a01b0382166119bc576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b610c3682600083611ee2565b6040516001600160a01b03848116602483015283811660448301526064820183905261165c9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120a1565b61165c84848484604051602401611a5e9493929190612dee565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f63fb8bc50000000000000000000000000000000000000000000000000000000017905261211d565b60006000196000611acb85611104565b9050610f9133858784611b57565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054611b8f906001600160a01b03168630866119c8565b611b998483612126565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051611be7929190918252602082015260400190565b60405180910390a35050505050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006001600160a01b0386811690851614611c3557611c358487846115ac565b611c3f8483611979565b8054611c55906001600160a01b03168685612175565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051611cad929190918252602082015260400190565b60405180910390a4505050505050565b611cc56121a6565b610c36828261220d565b611cd76121a6565b61125e81612270565b611ce86121a6565b61125e8161232a565b610f486121a6565b61165c84848484604051602401611d139493929190612e2a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5a4776320000000000000000000000000000000000000000000000000000000017905261211d565b600080611d7e868686612332565b9050611d898361240f565b8015611da5575060008480611da057611da0612e6f565b868809115b1561108057611db5600182612ca2565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516611e23576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b6001600160a01b038416611e66576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611edb57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611be791815260200190565b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416611f305781816002016000828254611f259190612ca2565b90915550611fbb9050565b6001600160a01b03841660009081526020829052604090205482811015611f9c576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610ce3565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611fd9576002810180548390039055611ff8565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161203d91815260200190565b60405180910390a350505050565b6120548261243c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156120995761155882826124d9565b610c36612546565b60006120b66001600160a01b0384168361257e565b905080516000141580156120db5750808060200190518101906120d99190612e85565b155b15611558576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ce3565b61125e8161258c565b6001600160a01b038216612169576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ce3565b610c3660008383611ee2565b6040516001600160a01b0383811660248301526044820183905261155891859182169063a9059cbb906064016119fd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122156121a6565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036122618482612ef5565b506004810161165c8382612ef5565b6122786121a6565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006000806122a5846125ad565b91509150816122b55760126122b7565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff929092169190910273ffffffffffffffffffffffffffffffffffffffff1916176001600160a01b0394909416939093179091555050565b6112126121a6565b60008383028160001985870982811083820303915050806000036123695783828161235f5761235f612e6f565b0492505050610a30565b8084116123a2576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000600282600381111561242557612425612fb5565b61242f9190612fcb565b60ff166001149050919050565b806001600160a01b03163b60000361248b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610ce3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516124f69190612ffb565b600060405180830381855af49150503d8060008114612531576040519150601f19603f3d011682016040523d82523d6000602084013e612536565b606091505b50915091506110808583836126b7565b3415610f48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610a308383600061272c565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829182916001600160a01b0387169161262291612ffb565b600060405180830381855afa9150503d806000811461265d576040519150601f19603f3d011682016040523d82523d6000602084013e612662565b606091505b509150915081801561267657506020815110155b156126aa576000818060200190518101906126919190612c0d565b905060ff81116126a8576001969095509350505050565b505b5060009485945092505050565b6060826126cc576126c7826127d8565b610a30565b81511580156126e357506001600160a01b0384163b155b15612725576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ce3565b5080610a30565b60608147101561276a576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610ce3565b600080856001600160a01b031684866040516127869190612ffb565b60006040518083038185875af1925050503d80600081146127c3576040519150601f19603f3d011682016040523d82523d6000602084013e6127c8565b606091505b5091509150611db58683836126b7565b8051156127e85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8381101561283557818101518382015260200161281d565b50506000910152565b6000815180845261285681602086016020860161281a565b601f01601f19169290920160200192915050565b602081526000610a30602083018461283e565b60006020828403121561288f57600080fd5b5035919050565b6001600160a01b038116811461125e57600080fd5b600080604083850312156128be57600080fd5b82356128c981612896565b946020939093013593505050565b6000806000606084860312156128ec57600080fd5b83356128f781612896565b9250602084013561290781612896565b929592945050506040919091013590565b60006020828403121561292a57600080fd5b8135610a3081612896565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561296657612966612935565b604051601f8501601f19908116603f0116810190828211818310171561298e5761298e612935565b816040528093508581528686860111156129a757600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126129d257600080fd5b610a308383356020850161294b565b600080600080600080600060e0888a0312156129fc57600080fd5b8735612a0781612896565b9650602088013567ffffffffffffffff80821115612a2457600080fd5b612a308b838c016129c1565b975060408a0135915080821115612a4657600080fd5b50612a538a828b016129c1565b955050606088013593506080880135925060a0880135915060c0880135612a7981612896565b8091505092959891949750929550565b60008060408385031215612a9c57600080fd5b8235612aa781612896565b9150602083013567ffffffffffffffff811115612ac357600080fd5b8301601f81018513612ad457600080fd5b612ae38582356020840161294b565b9150509250929050565b600080600060608486031215612b0257600080fd5b833592506020840135612b1481612896565b91506040840135612b2481612896565b809150509250925092565b60008060408385031215612b4257600080fd5b823591506020830135612b5481612896565b809150509250929050565b60008060408385031215612b7257600080fd5b8235612b7d81612896565b91506020830135612b5481612896565b60008060008060808587031215612ba357600080fd5b843567ffffffffffffffff80821115612bbb57600080fd5b612bc7888389016129c1565b95506020870135915080821115612bdd57600080fd5b50612bea878288016129c1565b935050604085013591506060850135612c0281612896565b939692955090935050565b600060208284031215612c1f57600080fd5b5051919050565b600181811c90821680612c3a57607f821691505b602082108103612c5a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156109e6576109e6612c60565b818103818111156109e6576109e6612c60565b808201808211156109e6576109e6612c60565b608081526000612cc8608083018761283e565b8281036020840152612cda818761283e565b9150508360408301526001600160a01b038316606083015295945050505050565b600181815b80851115612d36578160001904821115612d1c57612d1c612c60565b80851615612d2957918102915b93841c9390800290612d00565b509250929050565b600082612d4d575060016109e6565b81612d5a575060006109e6565b8160018114612d705760028114612d7a57612d96565b60019150506109e6565b60ff841115612d8b57612d8b612c60565b50506001821b6109e6565b5060208310610133831016604e8410600b8410161715612db9575081810a6109e6565b612dc38383612cfb565b8060001904821115612dd757612dd7612c60565b029392505050565b6000610a3060ff841683612d3e565b608081526000612e01608083018761283e565b6001600160a01b0395861660208401526040830194909452509216606090920191909152919050565b608081526000612e3d608083018761283e565b6001600160a01b03861660208401528460408401528281036060840152612e64818561283e565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208284031215612e9757600080fd5b81518015158114610a3057600080fd5b601f82111561155857600081815260208120601f850160051c81016020861015612ece5750805b601f850160051c820191505b81811015612eed57828155600101612eda565b505050505050565b815167ffffffffffffffff811115612f0f57612f0f612935565b612f2381612f1d8454612c26565b84612ea7565b602080601f831160018114612f585760008415612f405750858301515b600019600386901b1c1916600185901b178555612eed565b600085815260208120601f198616915b82811015612f8757888601518255948401946001909101908401612f68565b5085821015612fa55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b600060ff831680612fec57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b6000825161300d81846020870161281a565b919091019291505056fe6465706f7369742066726f6d20257320746f20256420746f6b656e733a207265633a202573a2646970667358221220714383a810f0a491f5985b60cb4a65e89a2d714a8948a685b94fae24f153bc8464736f6c63430008140033