[ { "inputs": [ { "internalType": "address", "name": "_lzEndpoint", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "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" }, { "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": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "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": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "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": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "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": "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": [ { "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": "amount", "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": "amount", "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" } ]
60c06040523480156200001157600080fd5b506040516200448838038062004488833981016040819052620000349162000212565b6040518060400160405280601081526020016f2230b1b5b4b29027a32a102a37b5b2b760811b815250604051806040016040528060068152602001654441434b494560d01b8152508233838362000090620001b860201b60201c565b848481818181620000a133620001bd565b6001600160a01b038083166080528116620000cf57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200011757600080fd5b505af11580156200012c573d6000803e3d6000fd5b5050505050505050620001446200020d60201b60201c565b60ff168360ff1610156200016b576040516301e9714b60e41b815260040160405180910390fd5b620001786006846200025a565b6200018590600a62000379565b60a05250600891506200019b905083826200042f565b506009620001aa82826200042f565b5050505050505050620004fb565b601290565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000276576200027662000244565b92915050565b600181815b80851115620002bd578160001904821115620002a157620002a162000244565b80851615620002af57918102915b93841c939080029062000281565b509250929050565b600082620002d65750600162000276565b81620002e55750600062000276565b8160018114620002fe5760028114620003095762000329565b600191505062000276565b60ff8411156200031d576200031d62000244565b50506001821b62000276565b5060208310610133831016604e8410600b84101617156200034e575081810a62000276565b6200035a83836200027c565b806000190482111562000371576200037162000244565b029392505050565b60006200023d60ff841683620002c5565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003b557607f821691505b602082108103620003d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042a57600081815260208120601f850160051c81016020861015620004055750805b601f850160051c820191505b81811015620004265782815560010162000411565b5050505b505050565b81516001600160401b038111156200044b576200044b6200038a565b62000463816200045c8454620003a0565b84620003dc565b602080601f8311600181146200049b5760008415620004825750858301515b600019600386901b1c1916600185901b17855562000426565b600085815260208120601f198616915b82811015620004cc57888601518255948401946001909101908401620004ab565b5085821015620004eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051613f2162000567600039600081816107230152818161238d0152818161240201526124ef0152600081816105c701528181610acd0152818161140a0152818161193901528181611fa8015281816122a4015281816127b101526128aa0152613f216000f3fe6080604052600436106102e75760003560e01c80637d25a05e11610184578063bb0b6a53116100d6578063d045a0dc1161008a578063f2fde38b11610064578063f2fde38b1461090d578063fc0c546a1461054b578063ff7bd03d1461092d57600080fd5b8063d045a0dc14610887578063d42438851461089a578063dd62ed3e146108ba57600080fd5b8063bd815db0116100bb578063bd815db014610833578063c7c7f5b314610846578063ca5eb5e11461086757600080fd5b8063bb0b6a53146107e6578063bc70b3541461081357600080fd5b8063963efcaa11610138578063a9059cbb11610112578063a9059cbb14610779578063b731ea0a14610799578063b98bd070146107c657600080fd5b8063963efcaa146107115780639f68b96414610745578063a457c2d71461075957600080fd5b8063857749b011610169578063857749b0146106bd5780638da5cb5b146106d157806395d89b41146106fc57600080fd5b80637d25a05e1461066157806382413eac1461069d57600080fd5b8063313ce5671161023d5780635535d461116101f15780636fc1b31e116101cb5780636fc1b31e146105e957806370a0823114610609578063715018a61461064c57600080fd5b80635535d4611461055e5780635a0dfe4d1461057e5780635e280f11146105b557600080fd5b8063395093511161022257806339509351146104fe5780633b6f743b1461051e57806352ae28791461054b57600080fd5b8063313ce567146104bc5780633400288b146104de57600080fd5b8063134d4f251161029f57806318160ddd1161027957806318160ddd146104685780631f5e13341461048757806323b872dd1461049c57600080fd5b8063134d4f25146103dd578063156a0d0f1461040557806317442b701461044657600080fd5b80630d35b415116102d05780630d35b41514610347578063111ecdad1461037657806313137d65146103c857600080fd5b806306fdde03146102ec578063095ea7b314610317575b600080fd5b3480156102f857600080fd5b5061030161094d565b60405161030e9190612d58565b60405180910390f35b34801561032357600080fd5b50610337610332366004612d8d565b6109df565b604051901515815260200161030e565b34801561035357600080fd5b50610367610362366004612dd1565b6109f9565b60405161030e93929190612e06565b34801561038257600080fd5b506004546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b6103db6103d6366004612f17565b610acb565b005b3480156103e957600080fd5b506103f2600281565b60405161ffff909116815260200161030e565b34801561041157600080fd5b50604080517f02e49c2c000000000000000000000000000000000000000000000000000000008152600160208201520161030e565b34801561045257600080fd5b506040805160018152600260208201520161030e565b34801561047457600080fd5b506007545b60405190815260200161030e565b34801561049357600080fd5b506103f2600181565b3480156104a857600080fd5b506103376104b7366004612fb7565b610bca565b3480156104c857600080fd5b5060125b60405160ff909116815260200161030e565b3480156104ea57600080fd5b506103db6104f9366004613011565b610bf0565b34801561050a57600080fd5b50610337610519366004612d8d565b610c06565b34801561052a57600080fd5b5061053e61053936600461303b565b610c52565b60405161030e919061308d565b34801561055757600080fd5b50306103a3565b34801561056a57600080fd5b506103016105793660046130b6565b610cb9565b34801561058a57600080fd5b50610337610599366004613011565b63ffffffff919091166000908152600160205260409020541490565b3480156105c157600080fd5b506103a37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f557600080fd5b506103db6106043660046130e9565b610d5e565b34801561061557600080fd5b506104796106243660046130e9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b34801561065857600080fd5b506103db610de0565b34801561066d57600080fd5b5061068461067c366004613011565b600092915050565b60405167ffffffffffffffff909116815260200161030e565b3480156106a957600080fd5b506103376106b8366004613106565b610df4565b3480156106c957600080fd5b5060066104cc565b3480156106dd57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166103a3565b34801561070857600080fd5b50610301610e16565b34801561071d57600080fd5b506104797f000000000000000000000000000000000000000000000000000000000000000081565b34801561075157600080fd5b506000610337565b34801561076557600080fd5b50610337610774366004612d8d565b610e25565b34801561078557600080fd5b50610337610794366004612d8d565b610f01565b3480156107a557600080fd5b506002546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d257600080fd5b506103db6107e13660046131b2565b610f0f565b3480156107f257600080fd5b506104796108013660046131f4565b60016020526000908152604090205481565b34801561081f57600080fd5b5061030161082e36600461320f565b610f29565b6103db6108413660046131b2565b6110ea565b610859610854366004613270565b6112c2565b60405161030e9291906132fc565b34801561087357600080fd5b506103db6108823660046130e9565b6113bd565b6103db610895366004612f17565b611469565b3480156108a657600080fd5b506103db6108b53660046130e9565b6114b1565b3480156108c657600080fd5b506104796108d536600461334f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205490565b34801561091957600080fd5b506103db6109283660046130e9565b61152c565b34801561093957600080fd5b5061033761094836600461337d565b6115e3565b60606008805461095c90613399565b80601f016020809104026020016040519081016040528092919081815260200182805461098890613399565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b6000336109ed818585611619565b60019150505b92915050565b60408051808201909152600080825260208201526060610a2c604051806040016040528060008152602001600081525090565b604080518082018252600080825267ffffffffffffffff602080840182905284518381529081019094529195509182610a88565b604080518082019091526000815260606020820152815260200190600190039081610a605790505b509350600080610aad604089013560608a0135610aa860208c018c6131f4565b6117cc565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610b41576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610b5b90610b56908a6131f4565b611829565b14610bb257610b6d60208801886131f4565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610b38565b610bc18787878787878761187e565b50505050505050565b600033610bd8858285611a18565b610be3858585611aef565b60019150505b9392505050565b610bf8611d65565b610c028282611de6565b5050565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906109ed9082908690610c4d908790613444565b611619565b60408051808201909152600080825260208201526000610c8260408501356060860135610aa860208801886131f4565b915050600080610c928684611e3b565b9092509050610caf610ca760208801886131f4565b838388611f92565b9695505050505050565b600360209081526000928352604080842090915290825290208054610cdd90613399565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0990613399565b8015610d565780601f10610d2b57610100808354040283529160200191610d56565b820191906000526020600020905b815481529060010190602001808311610d3957829003601f168201915b505050505081565b610d66611d65565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610de8611d65565b610df26000612080565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461095c90613399565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610b38565b610ef68286868403611619565b506001949350505050565b6000336109ed818585611aef565b610f17611d65565b610c02610f248284613538565b6120f5565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610f5d90613399565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8990613399565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b5050505050905080516000036110265783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610e0e9350505050565b6000839003611036579050610e0e565b600283106110b45761107d84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061220692505050565b8061108b846002818861364e565b60405160200161109d93929190613678565b604051602081830303815290604052915050610e0e565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610b389291906136e9565b60005b818110156111fd5736838383818110611108576111086136fd565b905060200281019061111a919061372c565b905061114d61112c60208301836131f4565b602083013563ffffffff919091166000908152600160205260409020541490565b61115757506111eb565b3063d045a0dc60c08301358360a081013561117661010083018361376a565b611187610100890160e08a016130e9565b6111956101208a018a61376a565b6040518963ffffffff1660e01b81526004016111b797969594939291906137e5565b6000604051808303818588803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b5050505050505b806111f581613879565b9150506110ed565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015611249573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261128f91908101906138b1565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610b389190612d58565b6112ca612ca2565b604080518082019091526000808252602082015260008061130133604089013560608a01356112fc60208c018c6131f4565b61224b565b915091506000806113128984611e3b565b909250905061133e61132760208b018b6131f4565b8383611338368d90038d018d61391f565b8b612271565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a9061138c908d018d6131f4565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6113c5611d65565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561144e57600080fd5b505af1158015611462573d6000803e3d6000fd5b5050505050565b3330146114a2576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc187878787878787610bb2565b6114b9611d65565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610dd5565b611534611d65565b73ffffffffffffffffffffffffffffffffffffffff81166115d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b38565b6115e081612080565b50565b60006020820180359060019083906115fb90866131f4565b63ffffffff1681526020810191909152604001600020541492915050565b73ffffffffffffffffffffffffffffffffffffffff83166116bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff821661175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117d885612389565b915081905083811015611821576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610b38565b935093915050565b63ffffffff8116600090815260016020526040812054806109f3576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610b38565b600061189061188d87876123c0565b90565b905060006118bc826118aa6118a58a8a6123d8565b6123fb565b6118b760208d018d6131f4565b612431565b905060288611156119a95760006118f96118dc60608c0160408d01613951565b6118e960208d018d6131f4565b846118f48c8c612466565b6124b1565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906119759086908d90600090879060040161396e565b600060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6119ef60208d018d6131f4565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ae95781811015611adc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b38565b611ae98484848403611619565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff8216611c35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205481811015611ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d589086815260200190565b60405180910390a3611ae9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b38565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060806000611e988560200135611e51866124e8565b611e5e60a089018961376a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061251492505050565b9093509050600081611eab576001611eae565b60025b9050611ece611ec060208801886131f4565b8261082e60808a018a61376a565b60045490935073ffffffffffffffffffffffffffffffffffffffff1615611f8957600480546040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169163043a78eb91611f469188918891016139ad565b602060405180830381865afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8791906139d2565b505b50509250929050565b60408051808201909152600080825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff16815260200161200289611829565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016120379291906139ef565b6040805180830381865afa158015612053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120779190613ac3565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156121d657612127828281518110612116576121166136fd565b602002602001015160400151612206565b818181518110612139576121396136fd565b6020026020010151604001516003600084848151811061215b5761215b6136fd565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110612195576121956136fd565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816121c39190613b2d565b50806121ce81613879565b9150506120f8565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610dd59190613c47565b600281015161ffff8116600314610c0257816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610b389190612d58565b6000806122598585856117cc565b909250905061226886836125a6565b94509492505050565b612279612ca2565b6000612288846000015161276c565b6020850151909150156122a2576122a284602001516127ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016122ff8c611829565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161233b9291906139ef565b60806040518083038185885af1158015612359573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061237e9190613cee565b979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006123b68184613d38565b6109f39190613d73565b60006123cf602082848661364e565b610be991613d8a565b60006123e860286020848661364e565b6123f191613dc6565b60c01c9392505050565b60006109f37f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416613d73565b600073ffffffffffffffffffffffffffffffffffffffff84166124545761dead93505b61245e84846128cf565b509092915050565b6060612475826028818661364e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b6060848484846040516020016124ca9493929190613e0e565b6040516020818303038152906040529050949350505050565b505050565b60006109f37f000000000000000000000000000000000000000000000000000000000000000083613d38565b805160609015158061257557848460405160200161256192919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261259c565b8484338560405160200161258c9493929190613e8c565b6040516020818303038152906040525b9150935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902054818110156126ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610b38565b73ffffffffffffffffffffffffffffffffffffffff831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60008134146127a9576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610b38565b5090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283e9190613ee5565b905073ffffffffffffffffffffffffffffffffffffffff811661288d576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c0273ffffffffffffffffffffffffffffffffffffffff8216337f0000000000000000000000000000000000000000000000000000000000000000856129c4565b73ffffffffffffffffffffffffffffffffffffffff821661294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b38565b806007600082825461295e9190613444565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152611ae992879291600091612a97918516908490612b41565b8051909150156124e35780806020019051810190612ab591906139d2565b6124e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b38565b6060610e0e8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b759190613f02565b60006040518083038185875af1925050503d8060008114612bb2576040519150601f19603f3d011682016040523d82523d6000602084013e612bb7565b606091505b509150915061237e8783838760608315612c59578251600003612c525773ffffffffffffffffffffffffffffffffffffffff85163b612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b38565b5081610e0e565b610e0e8383815115612c6e5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b389190612d58565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001612ce5604051806040016040528060008152602001600081525090565b905290565b60005b83811015612d05578181015183820152602001612ced565b50506000910152565b60008151808452612d26816020860160208601612cea565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610be96020830184612d0e565b73ffffffffffffffffffffffffffffffffffffffff811681146115e057600080fd5b60008060408385031215612da057600080fd5b8235612dab81612d6b565b946020939093013593505050565b600060e08284031215612dcb57600080fd5b50919050565b600060208284031215612de357600080fd5b813567ffffffffffffffff811115612dfa57600080fd5b610e0e84828501612db9565b8351815260208085015190820152600060a08201604060a08185015281865180845260c08601915060c08160051b8701019350602080890160005b83811015612e9e578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40018552815180518852830151838801879052612e8b87890182612d0e565b9750509382019390820190600101612e41565b50508751606088015250505060208501516080850152509050610e0e565b600060608284031215612dcb57600080fd5b60008083601f840112612ee057600080fd5b50813567ffffffffffffffff811115612ef857600080fd5b602083019150836020828501011115612f1057600080fd5b9250929050565b600080600080600080600060e0888a031215612f3257600080fd5b612f3c8989612ebc565b965060608801359550608088013567ffffffffffffffff80821115612f6057600080fd5b612f6c8b838c01612ece565b909750955060a08a01359150612f8182612d6b565b90935060c08901359080821115612f9757600080fd5b50612fa48a828b01612ece565b989b979a50959850939692959293505050565b600080600060608486031215612fcc57600080fd5b8335612fd781612d6b565b92506020840135612fe781612d6b565b929592945050506040919091013590565b803563ffffffff8116811461300c57600080fd5b919050565b6000806040838503121561302457600080fd5b612dab83612ff8565b80151581146115e057600080fd5b6000806040838503121561304e57600080fd5b823567ffffffffffffffff81111561306557600080fd5b61307185828601612db9565b92505060208301356130828161302d565b809150509250929050565b8151815260208083015190820152604081016109f3565b803561ffff8116811461300c57600080fd5b600080604083850312156130c957600080fd5b6130d283612ff8565b91506130e0602084016130a4565b90509250929050565b6000602082840312156130fb57600080fd5b8135610be981612d6b565b60008060008060a0858703121561311c57600080fd5b6131268686612ebc565b9350606085013567ffffffffffffffff81111561314257600080fd5b61314e87828801612ece565b909450925050608085013561316281612d6b565b939692955090935050565b60008083601f84011261317f57600080fd5b50813567ffffffffffffffff81111561319757600080fd5b6020830191508360208260051b8501011115612f1057600080fd5b600080602083850312156131c557600080fd5b823567ffffffffffffffff8111156131dc57600080fd5b6131e88582860161316d565b90969095509350505050565b60006020828403121561320657600080fd5b610be982612ff8565b6000806000806060858703121561322557600080fd5b61322e85612ff8565b935061323c602086016130a4565b9250604085013567ffffffffffffffff81111561325857600080fd5b61326487828801612ece565b95989497509550505050565b6000806000838503608081121561328657600080fd5b843567ffffffffffffffff81111561329d57600080fd5b6132a987828801612db9565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156132dc57600080fd5b5060208401915060608401356132f181612d6b565b809150509250925092565b600060c0820190508351825267ffffffffffffffff60208501511660208301526040840151613338604084018280518252602090810151910152565b5082516080830152602083015160a0830152610be9565b6000806040838503121561336257600080fd5b823561336d81612d6b565b9150602083013561308281612d6b565b60006060828403121561338f57600080fd5b610be98383612ebc565b600181811c908216806133ad57607f821691505b602082108103612dcb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109f3576109f3613415565b6040516060810167ffffffffffffffff8111828210171561347a5761347a6133e6565b60405290565b6040805190810167ffffffffffffffff8111828210171561347a5761347a6133e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134ea576134ea6133e6565b604052919050565b600067ffffffffffffffff82111561350c5761350c6133e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600067ffffffffffffffff80841115613553576135536133e6565b8360051b60206135648183016134a3565b86815291850191818101903684111561357c57600080fd5b865b84811015613642578035868111156135965760008081fd5b880160603682900312156135aa5760008081fd5b6135b2613457565b6135bb82612ff8565b81526135c88683016130a4565b86820152604080830135898111156135e05760008081fd5b929092019136601f8401126135f55760008081fd5b8235613608613603826134f2565b6134a3565b818152368983870101111561361d5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161357e565b50979650505050505050565b6000808585111561365e57600080fd5b8386111561366b57600080fd5b5050820193919092039150565b6000845161368a818460208901612cea565b8201838582376000930192835250909392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000610e0e6020830184866136a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261376057600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261379f57600080fd5b83018035915067ffffffffffffffff8211156137ba57600080fd5b602001915036819003821315612f1057600080fd5b67ffffffffffffffff811681146115e057600080fd5b63ffffffff6137f389612ff8565b1681526020880135602082015260006040890135613810816137cf565b67ffffffffffffffff811660408401525087606083015260e0608083015261383c60e0830187896136a0565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c084015261386b8185876136a0565b9a9950505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138aa576138aa613415565b5060010190565b6000602082840312156138c357600080fd5b815167ffffffffffffffff8111156138da57600080fd5b8201601f810184136138eb57600080fd5b80516138f9613603826134f2565b81815285602083850101111561390e57600080fd5b612077826020830160208601612cea565b60006040828403121561393157600080fd5b613939613480565b82358152602083013560208201528091505092915050565b60006020828403121561396357600080fd5b8135610be9816137cf565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201526000610caf6080830184612d0e565b6040815260006139c06040830185612d0e565b82810360208401526120778185612d0e565b6000602082840312156139e457600080fd5b8151610be98161302d565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152613a2560e0840182612d0e565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152613a608282612d0e565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b600060408284031215613aa557600080fd5b613aad613480565b9050815181526020820151602082015292915050565b600060408284031215613ad557600080fd5b610be98383613a93565b601f8211156124e357600081815260208120601f850160051c81016020861015613b065750805b601f850160051c820191505b81811015613b2557828155600101613b12565b505050505050565b815167ffffffffffffffff811115613b4757613b476133e6565b613b5b81613b558454613399565b84613adf565b602080601f831160018114613bae5760008415613b785750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b25565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bfb57888601518255948401946001909101908401613bdc565b5085821015613c3757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613ce0578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613ccc81860183612d0e565b968901969450505090860190600101613c6e565b509098975050505050505050565b600060808284031215613d0057600080fd5b613d08613457565b825181526020830151613d1a816137cf565b6020820152613d2c8460408501613a93565b60408201529392505050565b600082613d6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176109f3576109f3613415565b803560208310156109f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015613e065780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c82015260008251613e7c81602c850160208701612cea565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16602082015282602882015260008251613ed5816048850160208701612cea565b9190910160480195945050505050565b600060208284031215613ef757600080fd5b8151610be981612d6b565b60008251613760818460208701612cea56fea164736f6c6343000814000a0000000000000000000000001a44076050125825900e736c501f859c50fe728c