[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_lzEndpoint", "type": "address" }, { "internalType": "address", "name": "_delegate", "type": "address" }, { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "internalType": "address", "name": "_bondingCurve", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": [], "name": "InvalidDelegate", "type": "error" }, { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "options", "type": "bytes" } ], "name": "InvalidOptions", "type": "error" }, { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" } ], "name": "NoPeer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "msgValue", "type": "uint256" } ], "name": "NotEnoughNative", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "OnlyEndpoint", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" } ], "name": "OnlyPeer", "type": "error" }, { "inputs": [], "name": "OnlySelf", "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": [ { "internalType": "bytes", "name": "result", "type": "bytes" } ], "name": "SimulationResult", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" } ], "name": "SlippageExceeded", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "message", "type": "string" } ], "name": "UniswapPoolNotCreated", "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": [ { "components": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" }, { "internalType": "bytes", "name": "options", "type": "bytes" } ], "indexed": false, "internalType": "struct EnforcedOptionParam[]", "name": "_enforcedOptions", "type": "tuple[]" } ], "name": "EnforcedOptionSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "inspector", "type": "address" } ], "name": "MsgInspectorSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "indexed": false, "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "toAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "name": "OFTReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "indexed": false, "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "fromAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "name": "OFTSent", "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": false, "internalType": "uint32", "name": "eid", "type": "uint32" }, { "indexed": false, "internalType": "bytes32", "name": "peer", "type": "bytes32" } ], "name": "PeerSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "preCrimeAddress", "type": "address" } ], "name": "PreCrimeSet", "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": "SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SEND_AND_CALL", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "origin", "type": "tuple" } ], "name": "allowInitializePath", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "approvalRequired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondingCurve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, { "internalType": "bytes", "name": "_extraOptions", "type": "bytes" } ], "name": "combineOptions", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimalConversionRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "endpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpointV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" } ], "name": "enforcedOptions", "outputs": [ { "internalType": "bytes", "name": "enforcedOption", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "", "type": "tuple" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "address", "name": "_sender", "type": "address" } ], "name": "isComposeMsgSender", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } ], "name": "isPeer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "_origin", "type": "tuple" }, { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "address", "name": "_executor", "type": "address" }, { "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "origin", "type": "tuple" }, { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "bytes", "name": "message", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct InboundPacket[]", "name": "_packets", "type": "tuple[]" } ], "name": "lzReceiveAndRevert", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "_origin", "type": "tuple" }, { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "address", "name": "_executor", "type": "address" }, { "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "lzReceiveSimulate", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "msgInspector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "nextNonce", "outputs": [ { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oApp", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oAppVersion", "outputs": [ { "internalType": "uint64", "name": "senderVersion", "type": "uint64" }, { "internalType": "uint64", "name": "receiverVersion", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "oftVersion", "outputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }, { "internalType": "uint64", "name": "version", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" } ], "name": "peers", "outputs": [ { "internalType": "bytes32", "name": "peer", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolCreated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "preCrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" } ], "name": "quoteOFT", "outputs": [ { "components": [ { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "uint256", "name": "maxAmountLD", "type": "uint256" } ], "internalType": "struct OFTLimit", "name": "oftLimit", "type": "tuple" }, { "components": [ { "internalType": "int256", "name": "feeAmountLD", "type": "int256" }, { "internalType": "string", "name": "description", "type": "string" } ], "internalType": "struct OFTFeeDetail[]", "name": "oftFeeDetails", "type": "tuple[]" }, { "components": [ { "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "internalType": "struct OFTReceipt", "name": "oftReceipt", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" }, { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } ], "name": "quoteSend", "outputs": [ { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "msgFee", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, { "internalType": "bytes32", "name": "to", "type": "bytes32" }, { "internalType": "uint256", "name": "amountLD", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountLD", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" }, { "internalType": "bytes", "name": "composeMsg", "type": "bytes" }, { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } ], "internalType": "struct SendParam", "name": "_sendParam", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "_fee", "type": "tuple" }, { "internalType": "address", "name": "_refundAddress", "type": "address" } ], "name": "send", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" }, { "components": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "lzTokenFee", "type": "uint256" } ], "internalType": "struct MessagingFee", "name": "fee", "type": "tuple" } ], "internalType": "struct MessagingReceipt", "name": "msgReceipt", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "amountSentLD", "type": "uint256" }, { "internalType": "uint256", "name": "amountReceivedLD", "type": "uint256" } ], "internalType": "struct OFTReceipt", "name": "oftReceipt", "type": "tuple" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegate", "type": "address" } ], "name": "setDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "uint16", "name": "msgType", "type": "uint16" }, { "internalType": "bytes", "name": "options", "type": "bytes" } ], "internalType": "struct EnforcedOptionParam[]", "name": "_enforcedOptions", "type": "tuple[]" } ], "name": "setEnforcedOptions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_msgInspector", "type": "address" } ], "name": "setMsgInspector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } ], "name": "setPeer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setPoolCreated", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_preCrime", "type": "address" } ], "name": "setPreCrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sharedDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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" } ]
60e080604052346105b6575f6132df803803809161001d82866105dc565b843982019060e0838303126105b65782516001600160401b0381116105b65782610048918501610613565b602084015190926001600160401b0382116105b657610068918501610613565b9261007560408201610668565b9361008260608301610668565b9361008f60808401610668565b956100a160c060a08601519501610668565b966001600160a01b03169586156105c9575f80546001600160a01b0319811689178255604051939189916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b03908116608081905291169081156105ba57803b156105b6576024835f8193819563ca5eb5e160e01b845260048401525af180156105ab57610596575b5064e8d4a5100060a0528051906001600160401b03821161058257600854600181811c91168015610578575b6020821014610564579081601f8493116104f6575b50602090601f8311600114610492578692610487575b50508160011b915f199060031b1c1916176008555b8051906001600160401b03821161047357600954600181811c91168015610469575b6020821014610455579081601f8493116103e7575b50602090601f8311600114610383578592610378575b50508160011b915f199060031b1c1916176009555b600a805460ff1916905581546001600160a01b031633141580610363575b61031d57600754818101809111610309577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020916007558484526005825260408420818154019055604051908152a360c052604051612c62908161067d82396080518181816107470152818161086701528181610d0401528181610fdc015281816118cb015281816128140152612ace015260a051818181610c540152818161128f01528181611eca0152818161208801526125ba015260c051818181610b0a0152818161184d01528181611a5501528181611fbb01526126240152f35b634e487b7160e01b83526011600452602483fd5b604051637c98ba8b60e01b815260206004820152601c60248201527f556e697377617020706f6f6c206e6f74206372656174656420796574000000006044820152606490fd5b5060c0516001600160a01b0316331415610229565b015190505f806101f6565b600986528186209250601f198416865b8181106103cf57509084600195949392106103b7575b505050811b0160095561020b565b01515f1960f88460031b161c191690555f80806103a9565b92936020600181928786015181550195019301610393565b600986529091507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af601f840160051c8101916020851061044b575b90601f859493920160051c01905b81811061043d57506101e0565b868155849350600101610430565b9091508190610422565b634e487b7160e01b85526022600452602485fd5b90607f16906101cb565b634e487b7160e01b84526041600452602484fd5b015190505f80610194565b600887528187209250601f198416875b8181106104de57509084600195949392106104c6575b505050811b016008556101a9565b01515f1960f88460031b161c191690555f80806104b8565b929360206001819287860151815501950193016104a2565b600887529091507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f840160051c8101916020851061055a575b90601f859493920160051c01905b81811061054c575061017e565b87815584935060010161053f565b9091508190610531565b634e487b7160e01b86526022600452602486fd5b90607f1690610169565b634e487b7160e01b85526041600452602485fd5b6105a39194505f906105dc565b5f925f61013d565b6040513d5f823e3d90fd5b5f80fd5b632d618d8160e21b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b601f909101601f19168101906001600160401b038211908210176105ff57604052565b634e487b7160e01b5f52604160045260245ffd5b81601f820112156105b6578051906001600160401b0382116105ff5760405192610647601f8401601f1916602001856105dc565b828452602083830101116105b657815f9260208093018386015e8301015290565b51906001600160a01b03821682036105b65756fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146102df578063095ea7b3146102da5780630d35b415146102d5578063111ecdad146102d057806313137d65146102cb578063134d4f25146102c6578063156a0d0f146102c157806317442b70146102bc57806318160ddd146102b75780631f5e1334146102b257806323b872dd146102ad5780632e41225b146102a8578063313ce567146102a35780633400288b1461029e5780633b6f743b1461029957806352ae28791461020d5780635535d461146102945780635a0dfe4d1461028f5780635e280f111461028a5780636fc1b31e1461028557806370a0823114610280578063715018a61461027b5780637d25a05e1461027657806382413eac14610271578063857749b01461026c5780638da5cb5b1461026757806395d89b4114610262578063963efcaa1461025d5780639f68b96414610258578063a9059cbb14610253578063b731ea0a1461024e578063b98bd07014610249578063bb0b6a5314610244578063bc70b3541461023f578063bd815db01461023a578063c71b49b014610235578063c7c7f5b314610230578063ca5eb5e11461022b578063d045a0dc14610226578063d424388514610221578063dd62ed3e1461021c578063eff1d50e14610217578063f2fde38b14610212578063fc0c546a1461020d5763ff7bd03d14610208575f80fd5b611b0d565b610da3565b611a84565b611a40565b6119e1565b611971565b611940565b6118a3565b6116b2565b61163f565b6114eb565b611497565b61145e565b61137b565b611301565b6112cc565b6112b2565b611278565b6111d3565b6111ac565b611191565b611133565b61110d565b6110b6565b61107b565b61100b565b610fc7565b610f81565b610f06565b610bf0565b610b61565b610b38565b610a93565b6109eb565b6109d0565b6109b3565b610992565b61096c565b610951565b610734565b610661565b610580565b610415565b61032a565b5f9103126102ee57565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206103279281815201906102f2565b90565b346102ee575f3660031901126102ee576040515f60085461034a81610ddd565b80845290600181169081156103e05750600114610382575b61037e8361037281850382610ee5565b60405191829182610316565b0390f35b60085f9081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3939250905b8082106103c657509091508101602001610372610362565b9192600181602092548385880101520191019092916103ae565b60ff191660208086019190915291151560051b840190910191506103729050610362565b6001600160a01b038116036102ee57565b346102ee5760403660031901126102ee5760043561043281610404565b60243533156104bf576001600160a01b0382169182156104ac576104728291335f52600660205260405f209060018060a01b03165f5260205260405f2090565b5560405190815233907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b908160e09103126102ee5790565b939291906104fc8560a081019260208091805184520151910152565b60a06040860152815180915260c0850190602060c08260051b8801019301915f905b82821061054457505050509060606105429294019060208091805184520151910152565b565b9091929360208061057260019360bf198c82030186526040838a5180518452015191818582015201906102f2565b96019201920190929161051e565b346102ee5760203660031901126102ee576004356001600160401b0381116102ee576105b09036906004016104d2565b6105b8611b70565b506105c1611b70565b506040516105ce81610eaa565b5f81526001600160401b0360208201526020604051926105ee8285610ee5565b5f8452601f1982015f5b81811061063e5750509061062261037e92604081013561061c606083013592611b9f565b50611ec1565b909161062c611b52565b928352820152604051938493846104e0565b839060405161064c81610eaa565b5f8152606083820152828289010152016105f8565b346102ee575f3660031901126102ee576004546040516001600160a01b039091168152602090f35b60609060031901126102ee57600490565b9181601f840112156102ee578235916001600160401b0383116102ee57602083818601950101116102ee57565b90600319820160e081126102ee576060136102ee57600491606435916084356001600160401b0381116102ee57826107019160040161069a565b9290929160a43561071181610404565b9160c435906001600160401b0382116102ee576107309160040161069a565b9091565b61073d366106c7565b50919492915050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03160361093e57813561077f81610b53565b61078881611f13565b9060208401358092036109195750506107b06107a4858361258e565b6001600160a01b031690565b936107d66107c66107c1838561259a565b6125ac565b6107cf85611b9f565b50866125e0565b916107e18260281090565b610839575b50506108127fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c92611b9f565b6040805163ffffffff92909216825260208201929092526001600160a01b039490941693a3005b90826108649261085e61084e60408801611f43565b9361085888611b9f565b92612670565b9261268c565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156102ee57604051633e5ac80960e11b8152935f9185918290849082906108bd908b8d60048501611f4d565b03925af1908115610914577fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c93610812926108fa575b50926107e6565b806109085f61090e93610ee5565b806102e4565b5f6108f3565b611e2e565b8061092863ffffffff92610b53565b63309afaf360e21b5f521660045260245260445ffd5b6391ac5e4f60e01b5f523360045260245ffd5b346102ee575f3660031901126102ee57602060405160028152f35b346102ee575f3660031901126102ee576040805162b9270b60e21b815260016020820152f35b346102ee575f3660031901126102ee57604080516001815260026020820152f35b346102ee575f3660031901126102ee576020600754604051908152f35b346102ee575f3660031901126102ee57602060405160018152f35b346102ee5760603660031901126102ee57600435610a0881610404565b602435610a1481610404565b6001600160a01b0382165f90815260066020908152604080832033845290915290205491604435919060018401610a5c575b610a509350611f77565b60405160018152602090f35b828410610a7857610a7383610a50950333836124fe565b610a46565b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b346102ee575f3660031901126102ee575f546001600160a01b031633148015610b06575b15610ad057610ace600160ff19600a541617600a55565b005b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610ab7565b346102ee575f3660031901126102ee57602060405160128152f35b63ffffffff8116036102ee57565b346102ee5760403660031901126102ee577f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b600435610b9f81610b53565b60243590610bab612011565b63ffffffff81165f5260016020528160405f2055610be1604051928392836020909392919363ffffffff60408201951681520152565b0390a1005b801515036102ee57565b346102ee5760403660031901126102ee576004356001600160401b0381116102ee57610c209036906004016104d2565b602435610c2c81610be6565b610c34611b70565b50813591606081013590610c7f6040820135610c4f86610b53565b610c7a7f00000000000000000000000000000000000000000000000000000000000000008092612558565b612576565b91808310610d8d57610d00604086610ce587610c9b8888612071565b90610ca585610b53565b610cad611b70565b50610cb785611f13565b610cce610cc2611b61565b63ffffffff9097168752565b602086015285850152606084015215156080830152565b815180938192631bb8518b60e31b83523090600484016121bc565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156109145761037e915f91610d5e575b5060405191829182815181526020918201519181019190915260400190565b610d80915060403d604011610d86575b610d788183610ee5565b8101906121a8565b82610d3f565b503d610d6e565b826371c4efed60e01b5f5260045260245260445ffd5b346102ee575f3660031901126102ee576020604051308152f35b6024359061ffff821682036102ee57565b359061ffff821682036102ee57565b90600182811c92168015610e0b575b6020831014610df757565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610dec565b5f9291815491610e2483610ddd565b8083529260018116908115610e795750600114610e4057505050565b5f9081526020812093945091925b838310610e5f575060209250010190565b600181602092949394548385870101520191019190610e4e565b915050602093945060ff929192191683830152151560051b010190565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610ec557604052565b610e96565b606081019081106001600160401b03821117610ec557604052565b90601f801991011681019081106001600160401b03821117610ec557604052565b346102ee5760403660031901126102ee5761037e610f66610f6d610f5a600435610f2f81610b53565b63ffffffff610f3c610dbd565b91165f52600360205260405f209061ffff165f5260205260405f2090565b60405192838092610e15565b0382610ee5565b6040519182916020835260208301906102f2565b346102ee5760403660031901126102ee576020610fbd600435610fa381610b53565b6024359063ffffffff165f52600160205260405f20541490565b6040519015158152f35b346102ee575f3660031901126102ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102ee5760203660031901126102ee577ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197602060043561104b81610404565b611053612011565b600480546001600160a01b0319166001600160a01b03929092169182179055604051908152a1005b346102ee5760203660031901126102ee5760043561109881610404565b60018060a01b03165f526005602052602060405f2054604051908152f35b346102ee575f3660031901126102ee576110ce612011565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102ee5760403660031901126102ee57611129600435610b53565b60206040515f8152f35b346102ee5760a03660031901126102ee5761114d36610689565b506064356001600160401b0381116102ee5761116d90369060040161069a565b5050602060843561117d81610404565b6040516001600160a01b0390911630148152f35b346102ee575f3660031901126102ee57602060405160068152f35b346102ee575f3660031901126102ee575f546040516001600160a01b039091168152602090f35b346102ee575f3660031901126102ee576040515f6009546111f381610ddd565b80845290600181169081156103e0575060011461121a5761037e8361037281850382610ee5565b60095f9081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af939250905b80821061125e57509091508101602001610372610362565b919260018160209254838588010152019101909291611246565b346102ee575f3660031901126102ee5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102ee575f3660031901126102ee5760206040515f8152f35b346102ee5760403660031901126102ee576112f66004356112ec81610404565b6024359033611f77565b602060405160018152f35b346102ee575f3660031901126102ee576002546040516001600160a01b039091168152602090f35b9060206003198301126102ee576004356001600160401b0381116102ee5760040182601f820112156102ee578035926001600160401b0384116102ee576020808301928560051b0101116102ee579190565b346102ee5761138936611329565b90611392612011565b61139b82611b88565b906113a96040519283610ee5565b828252602082019260051b8101903682116102ee5780935b8285106113d157610ace846123dc565b84356001600160401b0381116102ee578201906060823603126102ee57604051916113fb83610eca565b803561140681610b53565b835261141460208201610dce565b60208401526040810135906001600160401b0382116102ee57019036601f830112156102ee5760209261144e849336908581359101611bc4565b60408201528152019401936113c1565b346102ee5760203660031901126102ee5763ffffffff60043561148081610b53565b165f526001602052602060405f2054604051908152f35b346102ee5760603660031901126102ee576004356114b481610b53565b6114bc610dbd565b604435906001600160401b0382116102ee5761037e926114e3610f6d93369060040161069a565b929091611c89565b6114f436611329565b5f5b81811061156357604051638e9e709960e01b81525f81600481335afa80156109145761153d915f91611541575b50604051638351eea760e01b815291829160048301610316565b0390fd5b61155d91503d805f833e6115558183610ee5565b810190611e39565b82611523565b61156e818385611d3f565b9061159e61159a61157e84611b9f565b60208501359063ffffffff165f52600160205260405f20541490565b1590565b6116365760c08201359160a08101356115bb610100830183611d67565b9490916115ca60e08501611d99565b936115d9610120820182611d67565b959095303b156102ee575f96611606926040519a8b9889978897633411683760e21b895260048901611db4565b0391305af191821561091457600192611622575b505b016114f6565b806109085f61163093610ee5565b5f61161a565b6001915061161c565b346102ee575f3660031901126102ee57602060ff600a54166040519015158152f35b9160806105429294936116a1604060c0830197805184526001600160401b0360208201511660208501520151604083019060208091805184520151910152565b019060208091805184520151910152565b60803660031901126102ee576004356001600160401b0381116102ee576116dd9036906004016104d2565b60403660231901126102ee576064356116f581610404565b6116fd611e9b565b50611706611b70565b5061170f611e9b565b50611718611b70565b506060820135906117316040840135610c4f8535610b53565b91808310610d8d575033156118905760ff600a5416158061187c575b80611849575b61180357611788906117658333612894565b61176f8385612071565b61177886611b9f565b91611782366124d6565b92612797565b90611791611b52565b928184528160208501527f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a6117f16117ca855193611b9f565b936040519181839233978460409194939263ffffffff606083019616825260208201520152565b0390a361037e60405192839283611661565b604051637c98ba8b60e01b815260206004820152601c60248201527f556e697377617020706f6f6c206e6f74206372656174656420796574000000006044820152606490fd5b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415611753565b505f546001600160a01b031633141561174d565b634b637e8f60e11b5f525f60045260245ffd5b346102ee575f60203660031901126102ee576004356118c181610404565b6118c9612011565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b156102ee5760405163ca5eb5e160e01b81526001600160a01b039091166004820152905f908290602490829084905af1801561091457611934575080f35b610ace91505f90610ee5565b611949366106c7565b5050509290303303611962576107b06107a4858361258e565b63029a949d60e31b5f5260045ffd5b346102ee5760203660031901126102ee577fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776060206004356119b181610404565b6119b9612011565b600280546001600160a01b0319166001600160a01b03929092169182179055604051908152a1005b346102ee5760403660031901126102ee576020611a37600435611a0381610404565b60243590611a1082610404565b60018060a01b03165f526006835260405f209060018060a01b03165f5260205260405f2090565b54604051908152f35b346102ee575f3660031901126102ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102ee5760203660031901126102ee57600435611aa181610404565b611aa9612011565b6001600160a01b03168015611afa575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346102ee5760603660031901126102ee576020611b2936610689565b63ffffffff8135611b3981610b53565b165f52600182528160405f205491013560405191148152f35b60405190610542604083610ee5565b6040519061054260a083610ee5565b60405190611b7d82610eaa565b5f6020838281520152565b6001600160401b038111610ec55760051b60200190565b3561032781610b53565b6001600160401b038111610ec557601f01601f191660200190565b929192611bd082611ba9565b91611bde6040519384610ee5565b8294818452818301116102ee578281602093845f960137010152565b90929192836002116102ee5783116102ee57600201916001190190565b805191908290602001825e015f815290565b611c43939261054292816040519687946020860190611c17565b918237015f815203601f198101845283610ee5565b908060209392818452848401375f828201840152601f01601f1916010190565b916020610327938181520191611c58565b610f5a610f669263ffffffff611cba9397959697165f52600360205260405f209061ffff165f5260205260405f2090565b805115611d1d578315611d17576002841015611cee57505061153d604051928392639a6d49cd60e01b845260048401611c78565b909280611d119161032794611d0c611d07368484611bc4565b61249e565b611bfa565b91611c29565b92509050565b509190610327913691611bc4565b634e487b7160e01b5f52603260045260245ffd5b9190811015611d625760051b8101359061013e19813603018212156102ee570190565b611d2b565b903590601e19813603018212156102ee57018035906001600160401b0382116102ee576020019181360383136102ee57565b3561032781610404565b6001600160401b038116036102ee57565b929093611e10926001600160401b0360406103279a98999763ffffffff8135611ddc81610b53565b168852602081013560208901520135611df481611da3565b166040860152606085015260e0608085015260e0840191611c58565b6001600160a01b0390941660a082015280840360c090910152611c58565b6040513d5f823e3d90fd5b6020818303126102ee578051906001600160401b0382116102ee570181601f820112156102ee57805190611e6c82611ba9565b92611e7a6040519485610ee5565b828452602083830101116102ee57815f9260208093018386015e8301015290565b60405190611ea882610eca565b815f81525f60208201526040611ebc611b70565b910152565b611ef090610c7a7f00000000000000000000000000000000000000000000000000000000000000008092612558565b918291808410611efd5750565b836371c4efed60e01b5f5260045260245260445ffd5b63ffffffff16805f52600160205260405f2054908115611f31575090565b63f6ff4fb760e01b5f5260045260245ffd5b3561032781611da3565b610327939260809260018060a01b0316825260208201525f604082015281606082015201906102f2565b91906001600160a01b03831615611890576001600160a01b03811615611ffe5760ff600a54161580611fea575b80611fb7575b61180357610542926129c0565b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415611faa565b505f546001600160a01b0316331415611fa4565b63ec442f0560e01b5f525f60045260245ffd5b5f546001600160a01b0316330361202457565b63118cdaa760e01b5f523360045260245ffd5b908160209103126102ee575161032781610be6565b9091612063610327936040845260408401906102f2565b9160208184039101526102f2565b90916120d66120fc936120b96120ad6020860135927f000000000000000000000000000000000000000000000000000000000000000090612558565b6001600160401b031690565b6120d06120c960a0870187611d67565b3691611bc4565b916126e0565b93909283945f14612178576002905b6114e36120f182611b9f565b916080810190611d67565b60045490926001600160a01b0390911690838261211857505050565b60405163043a78eb60e01b81529260209284928391829161213c916004840161204c565b03915afa80156109145761214d5750565b61216e9060203d602011612171575b6121668183610ee5565b810190612037565b50565b503d61215c565b6001906120e5565b91908260409103126102ee5760405161219881610eaa565b6020808294805184520151910152565b906040828203126102ee5761032791612180565b906020909392936040835263ffffffff815116604084015281810151606084015260806122106121fa604084015160a08488015260e08701906102f2565b6060840151868203603f190160a08801526102f2565b910151151560c08401526001600160a01b03909416910152565b8051821015611d625760209160051b010190565b601f821161224b57505050565b5f5260205f20906020601f840160051c83019310612283575b601f0160051c01905b818110612278575050565b5f815560010161226d565b9091508190612264565b91909182516001600160401b038111610ec5576122b4816122ae8454610ddd565b8461223e565b6020601f82116001146122f35781906122e49394955f926122e8575b50508160011b915f199060031b1c19161790565b9055565b015190505f806122d0565b601f19821690612306845f5260205f2090565b915f5b81811061234057509583600195969710612328575b505050811b019055565b01515f1960f88460031b161c191690555f808061231e565b9192602060018192868b015181550194019201612309565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061238a57505050505090565b90919293946020806123cd600193603f19868203018752606060408b5163ffffffff815116845261ffff86820151168685015201519181604082015201906102f2565b9701930193019193929061237b565b5f5b8151811015612467578061240160406123f96001948661222a565b51015161249e565b6124616040612410838661222a565b51015163ffffffff612422848761222a565b5151165f52600360205261245c60405f2061244c6020612442878a61222a565b51015161ffff1690565b61ffff165f5260205260405f2090565b61228d565b016123de565b506124997fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6749160405191829182612358565b0390a1565b600361ffff600283015116036124b15750565b604051639a6d49cd60e01b81526020600482015290819061153d9060248301906102f2565b60409060231901126102ee57604051906124ef82610eaa565b60243582526044356020830152565b6001600160a01b03169081156104bf576001600160a01b038116156104ac57612541915f52600660205260405f209060018060a01b03165f5260205260405f2090565b55565b634e487b7160e01b5f52601160045260245ffd5b8115612562570490565b634e487b7160e01b5f52601260045260245ffd5b8181029291811591840414171561258957565b612544565b906020116102ee573590565b906028116102ee576020013560c01c90565b610327906001600160401b037f00000000000000000000000000000000000000000000000000000000000000009116612576565b6001600160a01b03811615612667575b6001600160a01b03811615611ffe5760ff600a54161580612653575b80612620575b611803578161032791612955565b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415612612565b505f546001600160a01b031633141561260c565b5061dead6125f0565b90806028116102ee576103279136916027190190602801611bc4565b90926126d290610327936040519586946001600160401b0360c01b9060c01b16602086015263ffffffff60e01b9060e01b166028850152602c840152604c830190611c17565b03601f198101835282610ee5565b8251158015939061272657906126d26127239260405194859360208501526001600160401b0360c01b9060c01b1660408401523360488401526068830190611c17565b91565b50906040519160208301526001600160401b0360c01b9060c01b16604082015260288152612723604882610ee5565b906080828203126102ee5761278f90604080519361277285610eca565b80518552602081015161278481611da3565b602086015201612180565b604082015290565b6127f46080949261281096946127ab611e9b565b5060206127b88651612aa2565b950191825180612878575b506127cd85611f13565b92511515926127dd610cc2611b61565b602086015260408501526060840152151585830152565b6040518095819482936302637a4560e41b8452600484016121bc565b03917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610914575f9161284f575090565b610327915060803d608011612871575b6128698183610ee5565b810190612755565b503d61285f565b61288190612abf565b5f6127c3565b9190820180921161258957565b6001600160a01b0381169190826128de575090600754828101809111612589575f925f80516020612c0d833981519152916007555b600780548290039055604051908152602090a3565b6001600160a01b0381165f9081526005602052604090205482811061293257915f80516020612c0d8339815191529161292c825f9695039160018060a01b03165f52600560205260405f2090565b556128c9565b63391434e360e21b5f526001600160a01b0390911660045260245260445260645ffd5b90600754908082018092116125895760205f80516020612c0d833981519152915f9360075560018060a01b038516948515851461299f575080600754036007555b604051908152a3565b6001600160a01b03165f908152600560205260409020818154019055612996565b90916001600160a01b0382169182612a4d5750612a27816129f96129f45f80516020612c0d83398151915294600754612887565b600755565b6001600160a01b0385169485612a2c5750612a178160075403600755565b6040519081529081906020820190565b0390a3565b6001600160a01b03165f908152600560205260409020818154019055612a17565b6001600160a01b0381165f908152600560205260409020548281106129325791612a2791612a9c825f80516020612c0d83398151915295039160018060a01b03165f52600560205260405f2090565b556129f9565b803403612aac5790565b6304fb820960e51b5f523460045260245ffd5b60405163393f876560e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081600481865afa908115610914575f91612b3a575b506001600160a01b0316918215612b2b57610542923390612b75565b6329b99a9560e11b5f5260045ffd5b90506020813d602011612b6d575b81612b5560209383610ee5565b810103126102ee5751612b6781610404565b5f612b0f565b3d9150612b48565b6040516323b872dd60e01b60208083019182526001600160a01b039485166024840152949093166044820152606480820195909552938452925f9190612bbc608482610ee5565b519082855af115611e2e575f513d612c0357506001600160a01b0381163b155b612be35750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415612bdc56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202e7fe71470608a44581e466c3c381b3a9d8ff4368800f0f44e219e0ddfbcc2fe64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000084cd84df5e4d976a394ac6ef913f936188a608ab000000000000000000000000f404bff071af35cbff2aeef2bf4d3b2281ff726d0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000009b8e4d3571fc5f5c42d307a2e1061b5b0b0f46500000000000000000000000000000000000000000000000000000000000000074d6f6f64656e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d4f4f44454e4700000000000000000000000000000000000000000000000000