@le7el/rewards_engine
Version:
Smart contracts that distribute reward tokens according to conditional oracle or a merkle root
435 lines • 56.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ConditionalDistributor",
"sourceName": "contracts/ConditionalDistributor.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_defaultOracle",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IConditionOracle",
"name": "oracleContract",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes4",
"name": "claimInterface",
"type": "bytes4"
},
{
"indexed": true,
"internalType": "address",
"name": "rewardToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "rewardTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Claimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oracle",
"type": "address"
}
],
"name": "OracleAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oracle",
"type": "address"
}
],
"name": "OracleRemoved",
"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": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_state",
"type": "bool"
}
],
"name": "adminSetPaused",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_oracle",
"type": "address"
},
{
"internalType": "bool",
"name": "_state",
"type": "bool"
}
],
"name": "adminSwitchOracle",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "bytes4",
"name": "_claimInterface",
"type": "bytes4"
},
{
"internalType": "address",
"name": "_rewardToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_rewardTokenId",
"type": "uint256"
}
],
"name": "adminWithdrawUnclaimed",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IConditionOracle",
"name": "",
"type": "address"
}
],
"name": "authorizedOracles",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "contract IConditionOracle",
"name": "_oracleContract",
"type": "address"
},
{
"internalType": "bytes4",
"name": "_claimInterface",
"type": "bytes4"
},
{
"internalType": "address",
"name": "_rewardToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_rewardTokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_claim",
"type": "bytes"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IConditionOracle",
"name": "_oracleContract",
"type": "address"
},
{
"internalType": "bytes",
"name": "_claim",
"type": "bytes"
}
],
"name": "isClaimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "multicall",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b5060405162002f1338038062002f13833981810160405281019062000037919062000289565b60016000819055506200005f620000536200015160201b60201c565b6200015960201b60201c565b6000600160146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200014a576001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167e47706786c922d17b39285dc59d696bafea72c0b003d3841ae1202076f4c2e460405160405180910390a25b50620002bb565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002518262000224565b9050919050565b620002638162000244565b81146200026f57600080fd5b50565b600081519050620002838162000258565b92915050565b600060208284031215620002a257620002a16200021f565b5b6000620002b28482850162000272565b91505092915050565b612c4880620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063bc197c8111610066578063bc197c8114610235578063d7c8843014610265578063f23a6e6114610295578063f2fde38b146102c5576100ea565b80638da5cb5b146101cb578063a2f25d4b146101e9578063ac9650d814610205576100ea565b80635c9fbf63116100c85780635c9fbf631461015957806361c992a314610175578063715018a6146101a55780638ccca894146101af576100ea565b806301ffc9a7146100ef5780630463aed11461011f5780635c975abb1461013b575b600080fd5b610109600480360381019061010491906116e4565b6102e1565b604051610116919061172c565b60405180910390f35b61013960048036038101906101349190611773565b61035b565b005b610143610382565b604051610150919061172c565b60405180910390f35b610173600480360381019061016e9190611834565b610399565b005b61018f600480360381019061018a91906118d9565b6105e1565b60405161019c919061172c565b60405180910390f35b6101ad610601565b005b6101c960048036038101906101c49190611906565b610615565b005b6101d3610709565b6040516101e09190611955565b60405180910390f35b61020360048036038101906101fe91906119d5565b610733565b005b61021f600480360381019061021a9190611ada565b610c1d565b60405161022c9190611c79565b60405180910390f35b61024f600480360381019061024a9190611e8e565b610e07565b60405161025c9190611f6c565b60405180910390f35b61027f600480360381019061027a9190611f87565b610e1c565b60405161028c919061172c565b60405180910390f35b6102af60048036038101906102aa9190611fe7565b610ea6565b6040516102bc9190611f6c565b60405180910390f35b6102df60048036038101906102da919061207e565b610ebb565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610354575061035382610f3e565b5b9050919050565b610363610fa8565b801561037657610371611026565b61037f565b61037e611088565b5b50565b6000600160149054906101000a900460ff16905090565b6103a1610fa8565b63d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036104e35760008273ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016104299291906120ba565b602060405180830381865afa158015610446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a91906120f8565b90508273ffffffffffffffffffffffffffffffffffffffff1663f242432a308785856040518563ffffffff1660e01b81526004016104ab949392919061215c565b600060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b50505050506105db565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105da5760008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161056a9190611955565b602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab91906120f8565b90506105d885828573ffffffffffffffffffffffffffffffffffffffff166110eb9092919063ffffffff16565b505b5b50505050565b60026020528060005260406000206000915054906101000a900460ff1681565b610609610fa8565b6106136000611171565b565b61061d610fa8565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156106c1578173ffffffffffffffffffffffffffffffffffffffff167e47706786c922d17b39285dc59d696bafea72c0b003d3841ae1202076f4c2e460405160405180910390a2610705565b8173ffffffffffffffffffffffffffffffffffffffff167f9c8e7d83025bef8a04c664b2f753f64b8814bdb7e27291d7e50935f18cc3c71260405160405180910390a25b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61073b611237565b610743611281565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c690612211565b60405180910390fd5b600082828101906107e09190612267565b50905060008585886040516020016107fa9392919061234d565b604051602081830303815290604052805190602001209050808214610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906123d6565b60405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663d120469e8b87876040518463ffffffff1660e01b815260040161089393929190612423565b6020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d691906120f8565b90506000811161091b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610912906124a1565b60405180910390fd5b63d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109dd578673ffffffffffffffffffffffffffffffffffffffff1663f242432a308c89856040518563ffffffff1660e01b81526004016109a6949392919061215c565b600060405180830381600087803b1580156109c057600080fd5b505af11580156109d4573d6000803e3d6000fd5b50505050610b89565b63731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a9d578673ffffffffffffffffffffffffffffffffffffffff1663731133e98b88846040518463ffffffff1660e01b8152600401610a66939291906124c1565b600060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b50505050610b88565b6340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b5b578673ffffffffffffffffffffffffffffffffffffffff166340c10f198b836040518363ffffffff1660e01b8152600401610b249291906120ba565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b50505050610b87565b610b868a828973ffffffffffffffffffffffffffffffffffffffff166110eb9092919063ffffffff16565b5b5b5b8673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f53eca7b94684deb4c947fd3ea69437492c3c97b3ddf906d635fd101fd6498a9f8b8a86604051610c019392919061250b565b60405180910390a4505050610c146112d0565b50505050505050565b60606000610c296112da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ccc57600036610c666112e2565b6000369050610c759190612571565b908092610c84939291906125af565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610d1b565b600067ffffffffffffffff811115610ce757610ce6611c9b565b5b6040519080825280601f01601f191660200182016040528015610d195781602001600182028036833780820191505090505b505b90508383905067ffffffffffffffff811115610d3a57610d39611c9b565b5b604051908082528060200260200182016040528015610d6d57816020015b6060815260200190600190039081610d585790505b50915060005b84849050811015610dff57610dce30868684818110610d9557610d946125ea565b5b9050602002810190610da79190612628565b85604051602001610dba939291906126ec565b6040516020818303038152906040526112e7565b838281518110610de157610de06125ea565b5b60200260200101819052508080610df790612712565b915050610d73565b505092915050565b600063bc197c8160e01b905095945050505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e00f96133385856040518463ffffffff1660e01b8152600401610e5b93929190612423565b602060405180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c919061276f565b1590509392505050565b600063f23a6e6160e01b905095945050505050565b610ec3610fa8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f299061280e565b60405180910390fd5b610f3b81611171565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610fb06112da565b73ffffffffffffffffffffffffffffffffffffffff16610fce610709565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061287a565b60405180910390fd5b565b61102e611237565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110716112da565b60405161107e9190611955565b60405180910390a1565b611090611314565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110d46112da565b6040516110e19190611955565b60405180910390a1565b61116c8363a9059cbb60e01b848460405160240161110a9291906120ba565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061135d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61123f610382565b1561127f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611276906128e6565b60405180910390fd5b565b6002600054036112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90612952565b60405180910390fd5b6002600081905550565b6001600081905550565b600033905090565b600090565b606061130c8383604051806060016040528060278152602001612bec60279139611425565b905092915050565b61131c610382565b61135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906129be565b60405180910390fd5b565b60006113bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114ab9092919063ffffffff16565b90506000815114806113e15750808060200190518101906113e0919061276f565b5b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612a50565b60405180910390fd5b505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161144f9190612a70565b600060405180830381855af49150503d806000811461148a576040519150601f19603f3d011682016040523d82523d6000602084013e61148f565b606091505b50915091506114a0868383876114c3565b925050509392505050565b60606114ba8484600085611538565b90509392505050565b6060831561152557600083510361151d576114dd85611605565b61151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390612ad3565b60405180910390fd5b5b829050611530565b61152f8383611628565b5b949350505050565b60608247101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612b65565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516115a69190612a70565b60006040518083038185875af1925050503d80600081146115e3576040519150601f19603f3d011682016040523d82523d6000602084013e6115e8565b606091505b50915091506115f9878383876114c3565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561163b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9190612bc9565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116c18161168c565b81146116cc57600080fd5b50565b6000813590506116de816116b8565b92915050565b6000602082840312156116fa576116f9611682565b5b6000611708848285016116cf565b91505092915050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b61175081611711565b811461175b57600080fd5b50565b60008135905061176d81611747565b92915050565b60006020828403121561178957611788611682565b5b60006117978482850161175e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117cb826117a0565b9050919050565b6117db816117c0565b81146117e657600080fd5b50565b6000813590506117f8816117d2565b92915050565b6000819050919050565b611811816117fe565b811461181c57600080fd5b50565b60008135905061182e81611808565b92915050565b6000806000806080858703121561184e5761184d611682565b5b600061185c878288016117e9565b945050602061186d878288016116cf565b935050604061187e878288016117e9565b925050606061188f8782880161181f565b91505092959194509250565b60006118a6826117c0565b9050919050565b6118b68161189b565b81146118c157600080fd5b50565b6000813590506118d3816118ad565b92915050565b6000602082840312156118ef576118ee611682565b5b60006118fd848285016118c4565b91505092915050565b6000806040838503121561191d5761191c611682565b5b600061192b858286016117e9565b925050602061193c8582860161175e565b9150509250929050565b61194f816117c0565b82525050565b600060208201905061196a6000830184611946565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261199557611994611970565b5b8235905067ffffffffffffffff8111156119b2576119b1611975565b5b6020830191508360018202830111156119ce576119cd61197a565b5b9250929050565b600080600080600080600060c0888a0312156119f4576119f3611682565b5b6000611a028a828b016117e9565b9750506020611a138a828b016118c4565b9650506040611a248a828b016116cf565b9550506060611a358a828b016117e9565b9450506080611a468a828b0161181f565b93505060a088013567ffffffffffffffff811115611a6757611a66611687565b5b611a738a828b0161197f565b925092505092959891949750929550565b60008083601f840112611a9a57611a99611970565b5b8235905067ffffffffffffffff811115611ab757611ab6611975565b5b602083019150836020820283011115611ad357611ad261197a565b5b9250929050565b60008060208385031215611af157611af0611682565b5b600083013567ffffffffffffffff811115611b0f57611b0e611687565b5b611b1b85828601611a84565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b8d578082015181840152602081019050611b72565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bb582611b53565b611bbf8185611b5e565b9350611bcf818560208601611b6f565b611bd881611b99565b840191505092915050565b6000611bef8383611baa565b905092915050565b6000602082019050919050565b6000611c0f82611b27565b611c198185611b32565b935083602082028501611c2b85611b43565b8060005b85811015611c675784840389528151611c488582611be3565b9450611c5383611bf7565b925060208a01995050600181019050611c2f565b50829750879550505050505092915050565b60006020820190508181036000830152611c938184611c04565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611cd382611b99565b810181811067ffffffffffffffff82111715611cf257611cf1611c9b565b5b80604052505050565b6000611d05611678565b9050611d118282611cca565b919050565b600067ffffffffffffffff821115611d3157611d30611c9b565b5b602082029050602081019050919050565b6000611d55611d5084611d16565b611cfb565b90508083825260208201905060208402830185811115611d7857611d7761197a565b5b835b81811015611da15780611d8d888261181f565b845260208401935050602081019050611d7a565b5050509392505050565b600082601f830112611dc057611dbf611970565b5b8135611dd0848260208601611d42565b91505092915050565b600080fd5b600067ffffffffffffffff821115611df957611df8611c9b565b5b611e0282611b99565b9050602081019050919050565b82818337600083830152505050565b6000611e31611e2c84611dde565b611cfb565b905082815260208101848484011115611e4d57611e4c611dd9565b5b611e58848285611e0f565b509392505050565b600082601f830112611e7557611e74611970565b5b8135611e85848260208601611e1e565b91505092915050565b600080600080600060a08688031215611eaa57611ea9611682565b5b6000611eb8888289016117e9565b9550506020611ec9888289016117e9565b945050604086013567ffffffffffffffff811115611eea57611ee9611687565b5b611ef688828901611dab565b935050606086013567ffffffffffffffff811115611f1757611f16611687565b5b611f2388828901611dab565b925050608086013567ffffffffffffffff811115611f4457611f43611687565b5b611f5088828901611e60565b9150509295509295909350565b611f668161168c565b82525050565b6000602082019050611f816000830184611f5d565b92915050565b600080600060408486031215611fa057611f9f611682565b5b6000611fae868287016118c4565b935050602084013567ffffffffffffffff811115611fcf57611fce611687565b5b611fdb8682870161197f565b92509250509250925092565b600080600080600060a0868803121561200357612002611682565b5b6000612011888289016117e9565b9550506020612022888289016117e9565b94505060406120338882890161181f565b93505060606120448882890161181f565b925050608086013567ffffffffffffffff81111561206557612064611687565b5b61207188828901611e60565b9150509295509295909350565b60006020828403121561209457612093611682565b5b60006120a2848285016117e9565b91505092915050565b6120b4816117fe565b82525050565b60006040820190506120cf6000830185611946565b6120dc60208301846120ab565b9392505050565b6000815190506120f281611808565b92915050565b60006020828403121561210e5761210d611682565b5b600061211c848285016120e3565b91505092915050565b600082825260208201905092915050565b50565b6000612146600083612125565b915061215182612136565b600082019050919050565b600060a0820190506121716000830187611946565b61217e6020830186611946565b61218b60408301856120ab565b61219860608301846120ab565b81810360808301526121a981612139565b905095945050505050565b600082825260208201905092915050565b7f696e76616c6964206f7261636c65000000000000000000000000000000000000600082015250565b60006121fb600e836121b4565b9150612206826121c5565b602082019050919050565b6000602082019050818103600083015261222a816121ee565b9050919050565b6000819050919050565b61224481612231565b811461224f57600080fd5b50565b6000813590506122618161223b565b92915050565b6000806040838503121561227e5761227d611682565b5b600061228c85828601612252565b925050602083013567ffffffffffffffff8111156122ad576122ac611687565b5b6122b985828601611e60565b9150509250929050565b60008160601b9050919050565b60006122db826122c3565b9050919050565b60006122ed826122d0565b9050919050565b612305612300826117c0565b6122e2565b82525050565b6000819050919050565b612326612321826117fe565b61230b565b82525050565b6000819050919050565b6123476123428261168c565b61232c565b82525050565b600061235982866122f4565b6014820191506123698285612315565b6020820191506123798284612336565b600482019150819050949350505050565b7f696e76616c696420726577617264206461746100000000000000000000000000600082015250565b60006123c06013836121b4565b91506123cb8261238a565b602082019050919050565b600060208201905081810360008301526123ef816123b3565b9050919050565b60006124028385612125565b935061240f838584611e0f565b61241883611b99565b840190509392505050565b60006040820190506124386000830186611946565b818103602083015261244b8184866123f6565b9050949350505050565b7f6e6f20636c61696d000000000000000000000000000000000000000000000000600082015250565b600061248b6008836121b4565b915061249682612455565b602082019050919050565b600060208201905081810360008301526124ba8161247e565b9050919050565b60006080820190506124d66000830186611946565b6124e360208301856120ab565b6124f060408301846120ab565b818103606083015261250181612139565b9050949350505050565b60006060820190506125206000830186611f5d565b61252d60208301856120ab565b61253a60408301846120ab565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061257c826117fe565b9150612587836117fe565b925082820390508181111561259f5761259e612542565b5b92915050565b600080fd5b600080fd5b600080858511156125c3576125c26125a5565b5b838611156125d4576125d36125aa565b5b6001850283019150848603905094509492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261264557612644612619565b5b80840192508235915067ffffffffffffffff8211156126675761266661261e565b5b60208301925060018202360383131561268357612682612623565b5b509250929050565b600081905092915050565b60006126a2838561268b565b93506126af838584611e0f565b82840190509392505050565b60006126c682611b53565b6126d0818561268b565b93506126e0818560208601611b6f565b80840191505092915050565b60006126f9828587612696565b915061270582846126bb565b9150819050949350505050565b600061271d826117fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361274f5761274e612542565b5b600182019050919050565b60008151905061276981611747565b92915050565b60006020828403121561278557612784611682565b5b60006127938482850161275a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127f86026836121b4565b91506128038261279c565b604082019050919050565b60006020820190508181036000830152612827816127eb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128646020836121b4565b915061286f8261282e565b602082019050919050565b6000602082019050818103600083015261289381612857565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006128d06010836121b4565b91506128db8261289a565b602082019050919050565b600060208201905081810360008301526128ff816128c3565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061293c601f836121b4565b915061294782612906565b602082019050919050565b6000602082019050818103600083015261296b8161292f565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006129a86014836121b4565b91506129b382612972565b602082019050919050565b600060208201905081810360008301526129d78161299b565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612a3a602a836121b4565b9150612a45826129de565b604082019050919050565b60006020820190508181036000830152612a6981612a2d565b9050919050565b6000612a7c82846126bb565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612abd601d836121b4565b9150612ac882612a87565b602082019050919050565b60006020820190508181036000830152612aec81612ab0565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612b4f6026836121b4565b9150612b5a82612af3565b604082019050919050565b60006020820190508181036000830152612b7e81612b42565b9050919050565b600081519050919050565b6000612b9b82612b85565b612ba581856121b4565b9350612bb5818560208601611b6f565b612bbe81611b99565b840191505092915050565b60006020820190508181036000830152612be38184612b90565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d9aa49e861377b5db8467ee07ca4b721771549d8d9b7bf7edf36e32fab09467364736f6c63430008110033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063bc197c8111610066578063bc197c8114610235578063d7c8843014610265578063f23a6e6114610295578063f2fde38b146102c5576100ea565b80638da5cb5b146101cb578063a2f25d4b146101e9578063ac9650d814610205576100ea565b80635c9fbf63116100c85780635c9fbf631461015957806361c992a314610175578063715018a6146101a55780638ccca894146101af576100ea565b806301ffc9a7146100ef5780630463aed11461011f5780635c975abb1461013b575b600080fd5b610109600480360381019061010491906116e4565b6102e1565b604051610116919061172c565b60405180910390f35b61013960048036038101906101349190611773565b61035b565b005b610143610382565b604051610150919061172c565b60405180910390f35b610173600480360381019061016e9190611834565b610399565b005b61018f600480360381019061018a91906118d9565b6105e1565b60405161019c919061172c565b60405180910390f35b6101ad610601565b005b6101c960048036038101906101c49190611906565b610615565b005b6101d3610709565b6040516101e09190611955565b60405180910390f35b61020360048036038101906101fe91906119d5565b610733565b005b61021f600480360381019061021a9190611ada565b610c1d565b60405161022c9190611c79565b60405180910390f35b61024f600480360381019061024a9190611e8e565b610e07565b60405161025c9190611f6c565b60405180910390f35b61027f600480360381019061027a9190611f87565b610e1c565b60405161028c919061172c565b60405180910390f35b6102af60048036038101906102aa9190611fe7565b610ea6565b6040516102bc9190611f6c565b60405180910390f35b6102df60048036038101906102da919061207e565b610ebb565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610354575061035382610f3e565b5b9050919050565b610363610fa8565b801561037657610371611026565b61037f565b61037e611088565b5b50565b6000600160149054906101000a900460ff16905090565b6103a1610fa8565b63d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036104e35760008273ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016104299291906120ba565b602060405180830381865afa158015610446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a91906120f8565b90508273ffffffffffffffffffffffffffffffffffffffff1663f242432a308785856040518563ffffffff1660e01b81526004016104ab949392919061215c565b600060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b50505050506105db565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105da5760008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161056a9190611955565b602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab91906120f8565b90506105d885828573ffffffffffffffffffffffffffffffffffffffff166110eb9092919063ffffffff16565b505b5b50505050565b60026020528060005260406000206000915054906101000a900460ff1681565b610609610fa8565b6106136000611171565b565b61061d610fa8565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156106c1578173ffffffffffffffffffffffffffffffffffffffff167e47706786c922d17b39285dc59d696bafea72c0b003d3841ae1202076f4c2e460405160405180910390a2610705565b8173ffffffffffffffffffffffffffffffffffffffff167f9c8e7d83025bef8a04c664b2f753f64b8814bdb7e27291d7e50935f18cc3c71260405160405180910390a25b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61073b611237565b610743611281565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c690612211565b60405180910390fd5b600082828101906107e09190612267565b50905060008585886040516020016107fa9392919061234d565b604051602081830303815290604052805190602001209050808214610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906123d6565b60405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663d120469e8b87876040518463ffffffff1660e01b815260040161089393929190612423565b6020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d691906120f8565b90506000811161091b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610912906124a1565b60405180910390fd5b63d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109dd578673ffffffffffffffffffffffffffffffffffffffff1663f242432a308c89856040518563ffffffff1660e01b81526004016109a6949392919061215c565b600060405180830381600087803b1580156109c057600080fd5b505af11580156109d4573d6000803e3d6000fd5b50505050610b89565b63731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a9d578673ffffffffffffffffffffffffffffffffffffffff1663731133e98b88846040518463ffffffff1660e01b8152600401610a66939291906124c1565b600060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b50505050610b88565b6340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b5b578673ffffffffffffffffffffffffffffffffffffffff166340c10f198b836040518363ffffffff1660e01b8152600401610b249291906120ba565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b50505050610b87565b610b868a828973ffffffffffffffffffffffffffffffffffffffff166110eb9092919063ffffffff16565b5b5b5b8673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f53eca7b94684deb4c947fd3ea69437492c3c97b3ddf906d635fd101fd6498a9f8b8a86604051610c019392919061250b565b60405180910390a4505050610c146112d0565b50505050505050565b60606000610c296112da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ccc57600036610c666112e2565b6000369050610c759190612571565b908092610c84939291906125af565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610d1b565b600067ffffffffffffffff811115610ce757610ce6611c9b565b5b6040519080825280601f01601f191660200182016040528015610d195781602001600182028036833780820191505090505b505b90508383905067ffffffffffffffff811115610d3a57610d39611c9b565b5b604051908082528060200260200182016040528015610d6d57816020015b6060815260200190600190039081610d585790505b50915060005b84849050811015610dff57610dce30868684818110610d9557610d946125ea565b5b9050602002810190610da79190612628565b85604051602001610dba939291906126ec565b6040516020818303038152906040526112e7565b838281518110610de157610de06125ea565b5b60200260200101819052508080610df790612712565b915050610d73565b505092915050565b600063bc197c8160e01b905095945050505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e00f96133385856040518463ffffffff1660e01b8152600401610e5b93929190612423565b602060405180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c919061276f565b1590509392505050565b600063f23a6e6160e01b905095945050505050565b610ec3610fa8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f299061280e565b60405180910390fd5b610f3b81611171565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610fb06112da565b73ffffffffffffffffffffffffffffffffffffffff16610fce610709565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061287a565b60405180910390fd5b565b61102e611237565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110716112da565b60405161107e9190611955565b60405180910390a1565b611090611314565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110d46112da565b6040516110e19190611955565b60405180910390a1565b61116c8363a9059cbb60e01b848460405160240161110a9291906120ba565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061135d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61123f610382565b1561127f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611276906128e6565b60405180910390fd5b565b6002600054036112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90612952565b60405180910390fd5b6002600081905550565b6001600081905550565b600033905090565b600090565b606061130c8383604051806060016040528060278152602001612bec60279139611425565b905092915050565b61131c610382565b61135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906129be565b60405180910390fd5b565b60006113bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114ab9092919063ffffffff16565b90506000815114806113e15750808060200190518101906113e0919061276f565b5b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612a50565b60405180910390fd5b505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161144f9190612a70565b600060405180830381855af49150503d806000811461148a576040519150601f19603f3d011682016040523d82523d6000602084013e61148f565b606091505b50915091506114a0868383876114c3565b925050509392505050565b60606114ba8484600085611538565b90509392505050565b6060831561152557600083510361151d576114dd85611605565b61151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390612ad3565b60405180910390fd5b5b829050611530565b61152f8383611628565b5b949350505050565b60608247101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612b65565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516115a69190612a70565b60006040518083038185875af1925050503d80600081146115e3576040519150601f19603f3d011682016040523d82523d6000602084013e6115e8565b606091505b50915091506115f9878383876114c3565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561163b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9190612bc9565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116c18161168c565b81146116cc57600080fd5b50565b6000813590506116de816116b8565b92915050565b6000602082840312156116fa576116f9611682565b5b6000611708848285016116cf565b91505092915050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b61175081611711565b811461175b57600080fd5b50565b60008135905061176d81611747565b92915050565b60006020828403121561178957611788611682565b5b60006117978482850161175e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117cb826117a0565b9050919050565b6117db816117c0565b81146117e657600080fd5b50565b6000813590506117f8816117d2565b92915050565b6000819050919050565b611811816117fe565b811461181c57600080fd5b50565b60008135905061182e81611808565b92915050565b6000806000806080858703121561184e5761184d611682565b5b600061185c878288016117e9565b945050602061186d878288016116cf565b935050604061187e878288016117e9565b925050606061188f8782880161181f565b91505092959194509250565b60006118a6826117c0565b9050919050565b6118b68161189b565b81146118c157600080fd5b50565b6000813590506118d3816118ad565b92915050565b6000602082840312156118ef576118ee611682565b5b60006118fd848285016118c4565b91505092915050565b6000806040838503121561191d5761191c611682565b5b600061192b858286016117e9565b925050602061193c8582860161175e565b9150509250929050565b61194f816117c0565b82525050565b600060208201905061196a6000830184611946565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261199557611994611970565b5b8235905067ffffffffffffffff8111156119b2576119b1611975565b5b6020830191508360018202830111156119ce576119cd61197a565b5b9250929050565b600080600080600080600060c0888a0312156119f4576119f3611682565b5b6000611a028a828b016117e9565b9750506020611a138a828b016118c4565b9650506040611a248a828b016116cf565b9550506060611a358a828b016117e9565b9450506080611a468a828b0161181f565b93505060a088013567ffffffffffffffff811115611a6757611a66611687565b5b611a738a828b0161197f565b925092505092959891949750929550565b60008083601f840112611a9a57611a99611970565b5b8235905067ffffffffffffffff811115611ab757611ab6611975565b5b602083019150836020820283011115611ad357611ad261197a565b5b9250929050565b60008060208385031215611af157611af0611682565b5b600083013567ffffffffffffffff811115611b0f57611b0e611687565b5b611b1b85828601611a84565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b8d578082015181840152602081019050611b72565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bb582611b53565b611bbf8185611b5e565b9350611bcf818560208601611b6f565b611bd881611b99565b840191505092915050565b6000611bef8383611baa565b905092915050565b6000602082019050919050565b6000611c0f82611b27565b611c198185611b32565b935083602082028501611c2b85611b43565b8060005b85811015611c675784840389528151611c488582611be3565b9450611c5383611bf7565b925060208a01995050600181019050611c2f565b50829750879550505050505092915050565b60006020820190508181036000830152611c938184611c04565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611cd382611b99565b810181811067ffffffffffffffff82111715611cf257611cf1611c9b565b5b80604052505050565b6000611d05611678565b9050611d118282611cca565b919050565b600067ffffffffffffffff821115611d3157611d30611c9b565b5b602082029050602081019050919050565b6000611d55611d5084611d16565b611cfb565b90508083825260208201905060208402830185811115611d7857611d7761197a565b5b835b81811015611da15780611d8d888261181f565b845260208401935050602081019050611d7a565b5050509392505050565b600082601f830112611dc057611dbf611970565b5b8135611dd0848260208601611d42565b91505092915050565b600080fd5b600067ffffffffffffffff821115611df957611df8611c9b565b5b611e0282611b99565b9050602081019050919050565b82818337600083830152505050565b6000611e31611e2c84611dde565b611cfb565b905082815260208101848484011115611e4d57611e4c611dd9565b5b611e58848285611e0f565b509392505050565b600082601f830112611e7557611e74611970565b5b8135611e85848260208601611e1e565b91505092915050565b600080600080600060a08688031215611eaa57611ea9611682565b5b6000611eb8888289016117e9565b9550506020611ec9888289016117e9565b945050604086013567ffffffffffffffff811115611eea57611ee9611687565b5b611ef688828901611dab565b935050606086013567ffffffffffffffff811115611f1757611f16611687565b5b611f2388828901611dab565b925050608086013567ffffffffffffffff811115611f4457611f43611687565b5b611f5088828901611e60565b9150509295509295909350565b611f668161168c565b82525050565b6000602082019050611f816000830184611f5d565b92915050565b600080600060408486031215611fa057611f9f611682565b5b6000611fae868287016118c4565b935050602084013567ffffffffffffffff811115611fcf57611fce611687565b5b611fdb8682870161197f565b92509250509250925092565b600080600080600060a0868803121561200357612002611682565b5b6000612011888289016117e9565b9550506020612022888289016117e9565b94505060406120338882890161181f565b93505060606120448882890161181f565b925050608086013567ffffffffffffffff81111561206557612064611687565b5b61207188828901611e60565b9150509295509295909350565b60006020828403121