[
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "InvalidDispute",
"type": "error"
},
{
"inputs": [],
"name": "InvalidLengths",
"type": "error"
},
{
"inputs": [],
"name": "InvalidProof",
"type": "error"
},
{
"inputs": [],
"name": "InvalidReturnMessage",
"type": "error"
},
{
"inputs": [],
"name": "InvalidUninitializedRoot",
"type": "error"
},
{
"inputs": [],
"name": "NoDispute",
"type": "error"
},
{
"inputs": [],
"name": "NotGovernor",
"type": "error"
},
{
"inputs": [],
"name": "NotGovernorOrGuardian",
"type": "error"
},
{
"inputs": [],
"name": "NotTrusted",
"type": "error"
},
{
"inputs": [],
"name": "NotUpgradeable",
"type": "error"
},
{
"inputs": [],
"name": "NotWhitelisted",
"type": "error"
},
{
"inputs": [],
"name": "ReentrantCall",
"type": "error"
},
{
"inputs": [],
"name": "UnresolvedDispute",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddress",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "previousAdmin",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAdmin",
"type": "address"
}
],
"name": "AdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "beacon",
"type": "address"
}
],
"name": "BeaconUpgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "ClaimRecipientUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Claimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_disputeAmount",
"type": "uint256"
}
],
"name": "DisputeAmountUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint48",
"name": "_disputePeriod",
"type": "uint48"
}
],
"name": "DisputePeriodUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "valid",
"type": "bool"
}
],
"name": "DisputeResolved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_disputeToken",
"type": "address"
}
],
"name": "DisputeTokenUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "reason",
"type": "string"
}
],
"name": "Disputed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "newEpochDuration",
"type": "uint32"
}
],
"name": "EpochDurationUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isWhitelisted",
"type": "bool"
}
],
"name": "MainOperatorStatusUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isEnabled",
"type": "bool"
}
],
"name": "OperatorClaimingToggled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isWhitelisted",
"type": "bool"
}
],
"name": "OperatorToggled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Recovered",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "Revoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "ipfsHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint48",
"name": "endOfDisputePeriod",
"type": "uint48"
}
],
"name": "TreeUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "eoa",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "trust",
"type": "bool"
}
],
"name": "TrustedToggled",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "UpgradeabilityRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "CALLBACK_SUCCESS",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "accessControlManager",
"outputs": [
{
"internalType": "contract IAccessControlManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "canUpdateMerkleRoot",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "users",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes32[][]",
"name": "proofs",
"type": "bytes32[][]"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "claimRecipient",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "users",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes32[][]",
"name": "proofs",
"type": "bytes32[][]"
},
{
"internalType": "address[]",
"name": "recipients",
"type": "address[]"
},
{
"internalType": "bytes[]",
"name": "datas",
"type": "bytes[]"
}
],
"name": "claimWithRecipient",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "claimed",
"outputs": [
{
"internalType": "uint208",
"name": "amount",
"type": "uint208"
},
{
"internalType": "uint48",
"name": "timestamp",
"type": "uint48"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputeAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputePeriod",
"outputs": [
{
"internalType": "uint48",
"name": "",
"type": "uint48"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "disputeToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "reason",
"type": "string"
}
],
"name": "disputeTree",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disputer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "endOfDisputePeriod",
"outputs": [
{
"internalType": "uint48",
"name": "",
"type": "uint48"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getEpochDuration",
"outputs": [
{
"internalType": "uint32",
"name": "epochDuration",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IAccessControlManager",
"name": "_accessControlManager",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "lastTree",
"outputs": [
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "ipfsHash",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "mainOperators",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "onlyOperatorCanClaim",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "operators",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amountToRecover",
"type": "uint256"
}
],
"name": "recoverERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "valid",
"type": "bool"
}
],
"name": "resolveDispute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "revokeTree",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "revokeUpgradeability",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "setClaimRecipient",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_disputeAmount",
"type": "uint256"
}
],
"name": "setDisputeAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint48",
"name": "_disputePeriod",
"type": "uint48"
}
],
"name": "setDisputePeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_disputeToken",
"type": "address"
}
],
"name": "setDisputeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "epochDuration",
"type": "uint32"
}
],
"name": "setEpochDuration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "toggleMainOperatorStatus",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "toggleOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "trustAddress",
"type": "address"
}
],
"name": "toggleTrusted",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "tree",
"outputs": [
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "ipfsHash",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "ipfsHash",
"type": "bytes32"
}
],
"internalType": "struct MerkleTree",
"name": "_tree",
"type": "tuple"
}
],
"name": "updateTree",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
}
],
"name": "upgradeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "upgradeabilityDeactivated",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
}
]0x60a060405230608052348015610013575f80fd5b505f54610100900460ff161580801561003257505f54600160ff909116105b8061004b5750303b15801561004b57505f5460ff166001145b6100a05760405162461bcd60e51b815260206004820152602e60248201525f8051602061301f83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156100c1575f805461ff0019166101001790555b80156100f3575f805461ff0019169055604051600181525f8051602061303f8339815191529060200160405180910390a15b505f54610100900460ff161580801561011257505f54600160ff909116105b8061012b5750303b15801561012b57505f5460ff166001145b61017b5760405162461bcd60e51b815260206004820152602e60248201525f8051602061301f83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610097565b5f805460ff19166001179055801561019c575f805461ff0019166101001790555b80156101ce575f805461ff0019169055604051600181525f8051602061303f8339815191529060200160405180910390a15b50608051612e1c6102035f395f81816109a9015281816109f201528181610c0d01528181610c4d0152610cc80152612e1c5ff3fe6080604052600436106101ff575f3560e01c8063623b9e9d1161010f57806395788835116100a8578063c748d2611161006d578063c748d261146106fa578063cce80e7a14610719578063d9c9808714610748578063e57480e514610767578063fd54b22814610792575f80fd5b8063957888351461066a5780639fb67b581461067e578063b4a0bdf31461069d578063bdac7ca3146106bc578063c4d66de8146106db575f80fd5b8063623b9e9d1461051057806368508c981461052f5780636ac561031461054e5780636b5e479d1461056d57806371ee95c0146105a35780637be1c8f8146105c25780637ee84349146105f95780638237e5381461061857806389e1e82a1461064b575f80fd5b80633a51b79e1161019b5780634f1ef286116101605780634f1ef2861461045f57806352d1902d146104725780635bf31d4d146104865780635cec892a146104c25780635d3ea8f1146104e7575f80fd5b80633a51b79e146103ad5780633a5345ab146103cc5780634641fdef146103e057806349590657146103ff5780634d272d9514610413575f80fd5b806309454ba3146102035780630c9cbf0e1461022b5780630d10fca3146102af5780631171bda9146102d057806314769142146102ef57806314c8d37d1461031a5780632637588e146103395780632a25dd411461036f5780633659cfe61461038e575b5f80fd5b34801561020e575f80fd5b50610218606c5481565b6040519081526020015b60405180910390f35b348015610236575f80fd5b506102836102453660046125e1565b606d60209081525f9283526040808420909152908252902080546001909101546001600160d01b03821691600160d01b900465ffffffffffff169083565b604080516001600160d01b03909416845265ffffffffffff909216602084015290820152606001610222565b3480156102ba575f80fd5b506102ce6102c9366004612618565b6107ac565b005b3480156102db575f80fd5b506102ce6102ea36600461262f565b61081a565b3480156102fa575f80fd5b5061021861030936600461266d565b606f6020525f908152604090205481565b348015610325575f80fd5b506102ce610334366004612688565b610888565b348015610344575f80fd5b506102186103533660046125e1565b607060209081525f928352604080842090915290825290205481565b34801561037a575f80fd5b506102ce610389366004612743565b6108e3565b348015610399575f80fd5b506102ce6103a836600461266d565b61099f565b3480156103b8575f80fd5b506102ce6103c73660046125e1565b610a6f565b3480156103d7575f80fd5b506102ce610b1f565b3480156103eb575f80fd5b506102ce6103fa366004612787565b610b64565b34801561040a575f80fd5b50610218610bc1565b34801561041e575f80fd5b5061045261042d3660046125e1565b607260209081525f92835260408084209091529082529020546001600160a01b031681565b60405161022291906127ac565b6102ce61046d3660046127de565b610c03565b34801561047d575f80fd5b50610218610cbc565b348015610491575f80fd5b50606b546104ab90600160d01b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610222565b3480156104cd575f80fd5b50606b546104ab90600160a01b900465ffffffffffff1681565b3480156104f2575f80fd5b506104fb610d68565b60405163ffffffff9091168152602001610222565b34801561051b575f80fd5b506102ce61052a36600461266d565b610d87565b34801561053a575f80fd5b506102ce6105493660046125e1565b610e02565b348015610559575f80fd5b50606b54610452906001600160a01b031681565b348015610578575f80fd5b506102186105873660046125e1565b607360209081525f928352604080842090915290825290205481565b3480156105ae575f80fd5b506102ce6105bd366004612871565b610e0d565b3480156105cd575f80fd5b506071546105e1906001600160801b031681565b6040516001600160801b039091168152602001610222565b348015610604575f80fd5b506102ce61061336600461266d565b610ebf565b348015610623575f80fd5b506102187f41263d2f619e70e9cb211899844b4cf7322f9939361a152780541ef1d2031cb681565b348015610656575f80fd5b506102ce610665366004612938565b610f44565b348015610675575f80fd5b506102ce611036565b348015610689575f80fd5b506102ce6106983660046129ec565b611072565b3480156106a8575f80fd5b50606a54610452906001600160a01b031681565b3480156106c7575f80fd5b506102ce6106d63660046125e1565b6110c4565b3480156106e6575f80fd5b506102ce6106f536600461266d565b6111f4565b348015610705575f80fd5b50606954610452906001600160a01b031681565b348015610724575f80fd5b50606754606854610733919082565b60408051928352602083019190915201610222565b348015610753575f80fd5b506102ce610762366004612af4565b61133a565b348015610772575f80fd5b5061021861078136600461266d565b606e6020525f908152604090205481565b34801561079d575f80fd5b50606554606654610733919082565b6107b46114c0565b606b546001600160a01b0316156107de57604051630160c95d60e21b815260040160405180910390fd5b606c8190556040518181527f39bb629f3d59f5eddf978050e1f5fabeca2b5d02dfc9c25e84f32e7da1069db4906020015b60405180910390a150565b6108226114c0565b6108366001600160a01b038416838361154c565b816001600160a01b0316836001600160a01b03167ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6488360405161087b91815260200190565b60405180910390a3505050565b6108906114c0565b607180546001600160e01b0316600160e01b63ffffffff8416908102919091179091556040519081527f83b318614a148a5806087ebf98a15a44e2a3fd3f57b829f39f4396c53c6b8cc39060200161080f565b606b546001600160a01b03161561090d57604051630160c95d60e21b815260040160405180910390fd5b606b54600160a01b900465ffffffffffff16421061093e57604051631a8f039560e01b815260040160405180910390fd5b606c5460695461095d916001600160a01b0390911690339030906115b4565b606b80546001600160a01b031916331790556040517f5eca00b8ed745eee61451333090bfa56aa1f2a9e696a2aebe5f1f5b6cef6f2ff9061080f908390612b38565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109f05760405162461bcd60e51b81526004016109e790612b4a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a226115db565b6001600160a01b031614610a485760405162461bcd60e51b81526004016109e790612b96565b610a51816115f6565b604080515f80825260208201909252610a6c918391906116ae565b50565b6001600160a01b038116610a8a57610a856114c0565b610a92565b610a92611818565b6001600160a01b038083165f90815260736020908152604080832093851683529290522054610ac2816001612bf6565b6001600160a01b038481165f81815260736020908152604080832094881680845294825291829020949094555184158152919290917f7e66ef906c77feb2070e6fdd2b3c70d591cf625d18b809c3a21865d8d17e6522910161087b565b610b276114c0565b607180546001600160801b03191660011790556040517fba5b67b940ab06d91fe570b3522545e329c2d970f23e0b6453e76431724402c9905f90a1565b610b6c6114c0565b606b80546001600160d01b0316600160d01b65ffffffffffff8416908102919091179091556040519081527ffdf22e84af74bd4ab6b9646f6370a02bc886ed6ac25882db14e4ebf4b8e3bc7e9060200161080f565b606b545f90600160a01b900465ffffffffffff164210801590610bed5750606b546001600160a01b0316155b15610bf9575060655490565b5060675490565b90565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c4b5760405162461bcd60e51b81526004016109e790612b4a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c7d6115db565b6001600160a01b031614610ca35760405162461bcd60e51b81526004016109e790612b96565b610cac826115f6565b610cb8828260016116ae565b5050565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d565760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016109e7565b505f80516020612da083398151915290565b607154600160e01b900463ffffffff165f819003610c005750610e1090565b610d8f6114c0565b606b546001600160a01b031615610db957604051630160c95d60e21b815260040160405180910390fd5b606980546001600160a01b0319166001600160a01b0383169081179091556040517f1db8d6629941dcb63d5e0c927b89c174c714e139a4b9107a49de839d755f5d74905f90a250565b610cb83383836118a4565b5f876001600160401b03811115610e2657610e266126ab565b604051908082528060200260200182016040528015610e4f578160200160208202803683370190505b5090505f886001600160401b03811115610e6b57610e6b6126ab565b604051908082528060200260200182016040528015610e9e57816020015b6060815260200190600190039081610e895790505b509050610eb38a8a8a8a8a8a8a8a8a8a61190a565b50505050505050505050565b610ec76114c0565b6001600160a01b0381165f908152606e6020526040812054610eea906001612bf6565b6001600160a01b0383165f818152606e6020908152604091829020849055905160018414815292935090917f7628ea5f6112a16b36a8239aa208395a8e8f221688cfb3a5461faffb9700abcd910160405180910390a25050565b610f4c6114c0565b606b546001600160a01b0316610f755760405163126ea8e960e31b815260040160405180910390fd5b8015610fa957606b54606c54606954610f9c926001600160a01b039182169291169061154c565b610fa4611f28565b610ff4565b606c54606954610fc6916001600160a01b0390911690339061154c565b610fcf42611ff9565b606b60146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b606b80546001600160a01b031916905560405181151581527f8015c5005d9ad5d85ca80d3f894f08e0159277704c54166e5cff108800fa80cd9060200161080f565b61103e6114c0565b606b546001600160a01b03161561106857604051630160c95d60e21b815260040160405180910390fd5b611070611f28565b565b6110b78b8b8b8b8b8b8b8b8b8b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508d925061190a915050565b5050505050505050505050565b6001600160a01b03821633148015906111495750606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de9906111089033906004016127ac565b602060405180830381865afa158015611123573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111479190612c09565b155b1561116757604051636115324760e11b815260040160405180910390fd5b6001600160a01b038083165f90815260706020908152604080832093851683529290522054611197816001612bf6565b6001600160a01b038481165f81815260706020908152604080832094881680845294825291829020949094555184158152919290917f42343f44c66ea1eaffa334760d3da2cb731d2a0b3b3e30423df997faa36cc95c910161087b565b5f54610100900460ff161580801561121257505f54600160ff909116105b8061122b5750303b15801561122b57505f5460ff166001145b61128e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e7565b5f805460ff1916600117905580156112af575f805461ff0019166101001790555b6001600160a01b0382166112d65760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b0319166001600160a01b0384161790558015610cb8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b606b546001600160a01b03161515806113f45750335f908152606e6020526040902054600114158061137c5750606b54600160a01b900465ffffffffffff1642105b80156113f45750606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906113b39033906004016127ac565b602060405180830381865afa1580156113ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190612c09565b155b1561141257604051636115324760e11b815260040160405180910390fd5b604080518082019091526065805480835260668054602080860182905286359094559285013590556067556068555f61144a42611ff9565b606b805465ffffffffffff60a01b1916600160a01b65ffffffffffff841690810291909117909155604080518635815260208088013590820152908101919091529091507f23aa2e4f757a7bd974085d3e11439a843b137b30905e3ffd51b2097c34aef62e9060600160405180910390a1505050565b606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906114f09033906004016127ac565b602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f9190612c09565b61107057604051633b8d9d7560e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526115af90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261205c565b505050565b6115d5846323b872dd60e01b85858560405160240161157893929190612c24565b50505050565b5f80516020612da0833981519152546001600160a01b031690565b6071546001600160801b03166001036116225760405163229b36d360e01b815260040160405180910390fd5b606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906116529033906004016127ac565b602060405180830381865afa15801561166d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116919190612c09565b610a6c57604051633b8d9d7560e21b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156116e1576115af8361212f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561173b575060408051601f3d908101601f1916820190925261173891810190612c48565b60015b61179e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016109e7565b5f80516020612da0833981519152811461180c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016109e7565b506115af8383836121ca565b606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de9906118489033906004016127ac565b602060405180830381865afa158015611863573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118879190612c09565b61107057604051632678482f60e21b815260040160405180910390fd5b6001600160a01b038381165f818152607260209081526040808320868616808552925280832080546001600160a01b0319169588169586179055519092917f65e683f3800bc24dc7a30e42fb2e833290a4725be8b3658038a3f5d502f3d29f91a4505050565b607154600160801b90046bffffffffffffffffffffffff16600203611942576040516306fda65d60e31b815260040160405180910390fd5b60718054600160801b600160e01b031916600160811b179055888015806119695750808814155b806119745750808614155b8061197f5750808414155b8061198b575082518114155b80611997575081518114155b156119b557604051631df89e8b60e01b815260040160405180910390fd5b5f5b81811015611f01575f8c8c838181106119d2576119d2612c5f565b90506020020160208101906119e7919061266d565b90505f8b8b848181106119fc576119fc612c5f565b9050602002016020810190611a11919061266d565b90505f8a8a85818110611a2657611a26612c5f565b9050602002013590505f868581518110611a4257611a42612c5f565b60200260200101519050836001600160a01b0316336001600160a01b031614158015611a775750326001600160a01b03851614155b8015611aa35750335f9081526073602090815260408083206001600160a01b0387168452909152902054155b8015611ac65750335f908152607360209081526040808320838052909152902054155b8015611af257506001600160a01b0384165f908152607060209081526040808320338452909152902054155b8015611b1e57506001600160a01b0384165f908152607060209081526040808320838052909152902054155b8015611b965750606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de990611b559033906004016127ac565b602060405180830381865afa158015611b70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b949190612c09565b155b15611bb457604051630b094f2760e31b815260040160405180910390fd5b5f848484604051602001611bca93929190612c24565b604051602081830303815290604052805190602001209050611c40818c8c89818110611bf857611bf8612c5f565b9050602002810190611c0a9190612c73565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506121ee92505050565b611c5d576040516309bde33960e01b815260040160405180910390fd5b6001600160a01b038086165f908152606d60209081526040808320938816835292905290812054611c97906001600160d01b031685612bf6565b90506040518060600160405280611cad866122ff565b6001600160d01b031681526020014265ffffffffffff168152602001611cd1610bc1565b90526001600160a01b038781165f818152606d60209081526040808320948b168084529482529182902085518683015165ffffffffffff16600160d01b026001600160d01b039091161781559482015160019095019490945551848152919290917ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683910160405180910390a35f8a8881518110611d7057611d70612c5f565b60200260200101519050866001600160a01b0316336001600160a01b0316141580611da257506001600160a01b038116155b15611e16576001600160a01b038088165f9081526072602090815260408083208a851684529091529020541680611dfa57506001600160a01b038088165f908152607260209081526040808320838052909152902054165b6001600160a01b038116611e1057879150611e14565b8091505b505b8115611eef57611e306001600160a01b038716828461154c565b835115611eef57604051635f20da2d60e01b81525f906001600160a01b03831690635f20da2d90611e6b908b908b9088908b90600401612cb8565b6020604051808303815f875af1158015611e87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eab9190612c48565b90507f41263d2f619e70e9cb211899844b4cf7322f9939361a152780541ef1d2031cb68114611eed5760405163ee418e3760e01b815260040160405180910390fd5b505b876001019750505050505050506119b7565b505060718054600160801b600160e01b031916600160801b17905550505050505050505050565b6040805180820190915260675480825260685460208301819052606b805465ffffffffffff60a01b191690556065919091556066555f611f66610d68565b6040519091507f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee6905f90a1815160208301517f23aa2e4f757a7bd974085d3e11439a843b137b30905e3ffd51b2097c34aef62e919063ffffffff8416611fcc8142612cea565b611fd69190612d1a565b60408051938452602084019290925265ffffffffffff169082015260600161132e565b5f80612003610d68565b606b5490915063ffffffff821690600160d01b900465ffffffffffff168161202c600187612d44565b6120369190612cea565b612041906001612d6a565b61204b9190612d6a565b6120559190612d1a565b9392505050565b5f6120b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661236b9092919063ffffffff16565b905080515f14806120d05750808060200190518101906120d09190612c09565b6115af5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e7565b6001600160a01b0381163b61219c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016109e7565b5f80516020612da083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6121d383612381565b5f825111806121df5750805b156115af576115d583836123c0565b80515f908390825b818110156122c75784818151811061221057612210612c5f565b6020026020010151831015612271578285828151811061223257612232612c5f565b6020026020010151604051602001612254929190918252602082015260400190565b6040516020818303038152906040528051906020012092506122bf565b84818151811061228357612283612c5f565b6020026020010151836040516020016122a6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6001016121f6565b505f6122d1610bc1565b9050806122f1576040516301295acb60e31b815260040160405180910390fd5b919091149150505b92915050565b5f6001600160d01b038211156123675760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663038206269747360c81b60648201526084016109e7565b5090565b606061237984845f856123e5565b949350505050565b61238a8161212f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606120558383604051806060016040528060278152602001612dc0602791396124bc565b6060824710156124465760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e7565b5f80866001600160a01b031685876040516124619190612d89565b5f6040518083038185875af1925050503d805f811461249b576040519150601f19603f3d011682016040523d82523d5f602084013e6124a0565b606091505b50915091506124b187838387612530565b979650505050505050565b60605f80856001600160a01b0316856040516124d89190612d89565b5f60405180830381855af49150503d805f8114612510576040519150601f19603f3d011682016040523d82523d5f602084013e612515565b606091505b509150915061252686838387612530565b9695505050505050565b6060831561259e5782515f03612597576001600160a01b0385163b6125975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e7565b5081612379565b61237983838151156125b35781518083602001fd5b8060405162461bcd60e51b81526004016109e79190612b38565b6001600160a01b0381168114610a6c575f80fd5b5f80604083850312156125f2575f80fd5b82356125fd816125cd565b9150602083013561260d816125cd565b809150509250929050565b5f60208284031215612628575f80fd5b5035919050565b5f805f60608486031215612641575f80fd5b833561264c816125cd565b9250602084013561265c816125cd565b929592945050506040919091013590565b5f6020828403121561267d575f80fd5b8135612055816125cd565b5f60208284031215612698575f80fd5b813563ffffffff81168114612055575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156126e7576126e76126ab565b604052919050565b5f6001600160401b03831115612707576127076126ab565b61271a601f8401601f19166020016126bf565b905082815283838301111561272d575f80fd5b828260208301375f602084830101529392505050565b5f60208284031215612753575f80fd5b81356001600160401b03811115612768575f80fd5b8201601f81018413612778575f80fd5b612379848235602084016126ef565b5f60208284031215612797575f80fd5b813565ffffffffffff81168114612055575f80fd5b6001600160a01b0391909116815260200190565b5f82601f8301126127cf575f80fd5b612055838335602085016126ef565b5f80604083850312156127ef575f80fd5b82356127fa816125cd565b915060208301356001600160401b03811115612814575f80fd5b612820858286016127c0565b9150509250929050565b5f8083601f84011261283a575f80fd5b5081356001600160401b03811115612850575f80fd5b6020830191508360208260051b850101111561286a575f80fd5b9250929050565b5f805f805f805f806080898b031215612888575f80fd5b88356001600160401b038082111561289e575f80fd5b6128aa8c838d0161282a565b909a50985060208b01359150808211156128c2575f80fd5b6128ce8c838d0161282a565b909850965060408b01359150808211156128e6575f80fd5b6128f28c838d0161282a565b909650945060608b013591508082111561290a575f80fd5b506129178b828c0161282a565b999c989b5096995094979396929594505050565b8015158114610a6c575f80fd5b5f60208284031215612948575f80fd5b81356120558161292b565b5f82601f830112612962575f80fd5b813560206001600160401b038083111561297e5761297e6126ab565b8260051b61298d8382016126bf565b93845285810183019383810190888611156129a6575f80fd5b84880192505b858310156129e0578235848111156129c2575f80fd5b6129d08a87838c01016127c0565b83525091840191908401906129ac565b98975050505050505050565b5f805f805f805f805f805f60c08c8e031215612a06575f80fd5b6001600160401b03808d351115612a1b575f80fd5b612a288e8e358f0161282a565b909c509a5060208d0135811015612a3d575f80fd5b612a4d8e60208f01358f0161282a565b909a50985060408d0135811015612a62575f80fd5b612a728e60408f01358f0161282a565b909850965060608d0135811015612a87575f80fd5b612a978e60608f01358f0161282a565b909650945060808d0135811015612aac575f80fd5b612abc8e60808f01358f0161282a565b909450925060a08d0135811015612ad1575f80fd5b50612ae28d60a08e01358e01612953565b90509295989b509295989b9093969950565b5f60408284031215612b04575f80fd5b50919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6120556020830184612b0a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156122f9576122f9612be2565b5f60208284031215612c19575f80fd5b81516120558161292b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215612c58575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112612c88575f80fd5b8301803591506001600160401b03821115612ca1575f80fd5b6020019150600581901b360382131561286a575f80fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061252690830184612b0a565b5f65ffffffffffff80841680612d0e57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b65ffffffffffff818116838216028082169190828114612d3c57612d3c612be2565b505092915050565b65ffffffffffff828116828216039080821115612d6357612d63612be2565b5092915050565b65ffffffffffff818116838216019080821115612d6357612d63612be2565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d0305121bc27e5b3c83de82b9ca31a780197fe979530941ed14a581bbf57841d64736f6c63430008190033496e697469616c697a61626c653a20636f6e747261637420697320616c7265617f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498
0x6080604052600436106101ff575f3560e01c8063623b9e9d1161010f57806395788835116100a8578063c748d2611161006d578063c748d261146106fa578063cce80e7a14610719578063d9c9808714610748578063e57480e514610767578063fd54b22814610792575f80fd5b8063957888351461066a5780639fb67b581461067e578063b4a0bdf31461069d578063bdac7ca3146106bc578063c4d66de8146106db575f80fd5b8063623b9e9d1461051057806368508c981461052f5780636ac561031461054e5780636b5e479d1461056d57806371ee95c0146105a35780637be1c8f8146105c25780637ee84349146105f95780638237e5381461061857806389e1e82a1461064b575f80fd5b80633a51b79e1161019b5780634f1ef286116101605780634f1ef2861461045f57806352d1902d146104725780635bf31d4d146104865780635cec892a146104c25780635d3ea8f1146104e7575f80fd5b80633a51b79e146103ad5780633a5345ab146103cc5780634641fdef146103e057806349590657146103ff5780634d272d9514610413575f80fd5b806309454ba3146102035780630c9cbf0e1461022b5780630d10fca3146102af5780631171bda9146102d057806314769142146102ef57806314c8d37d1461031a5780632637588e146103395780632a25dd411461036f5780633659cfe61461038e575b5f80fd5b34801561020e575f80fd5b50610218606c5481565b6040519081526020015b60405180910390f35b348015610236575f80fd5b506102836102453660046125e1565b606d60209081525f9283526040808420909152908252902080546001909101546001600160d01b03821691600160d01b900465ffffffffffff169083565b604080516001600160d01b03909416845265ffffffffffff909216602084015290820152606001610222565b3480156102ba575f80fd5b506102ce6102c9366004612618565b6107ac565b005b3480156102db575f80fd5b506102ce6102ea36600461262f565b61081a565b3480156102fa575f80fd5b5061021861030936600461266d565b606f6020525f908152604090205481565b348015610325575f80fd5b506102ce610334366004612688565b610888565b348015610344575f80fd5b506102186103533660046125e1565b607060209081525f928352604080842090915290825290205481565b34801561037a575f80fd5b506102ce610389366004612743565b6108e3565b348015610399575f80fd5b506102ce6103a836600461266d565b61099f565b3480156103b8575f80fd5b506102ce6103c73660046125e1565b610a6f565b3480156103d7575f80fd5b506102ce610b1f565b3480156103eb575f80fd5b506102ce6103fa366004612787565b610b64565b34801561040a575f80fd5b50610218610bc1565b34801561041e575f80fd5b5061045261042d3660046125e1565b607260209081525f92835260408084209091529082529020546001600160a01b031681565b60405161022291906127ac565b6102ce61046d3660046127de565b610c03565b34801561047d575f80fd5b50610218610cbc565b348015610491575f80fd5b50606b546104ab90600160d01b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610222565b3480156104cd575f80fd5b50606b546104ab90600160a01b900465ffffffffffff1681565b3480156104f2575f80fd5b506104fb610d68565b60405163ffffffff9091168152602001610222565b34801561051b575f80fd5b506102ce61052a36600461266d565b610d87565b34801561053a575f80fd5b506102ce6105493660046125e1565b610e02565b348015610559575f80fd5b50606b54610452906001600160a01b031681565b348015610578575f80fd5b506102186105873660046125e1565b607360209081525f928352604080842090915290825290205481565b3480156105ae575f80fd5b506102ce6105bd366004612871565b610e0d565b3480156105cd575f80fd5b506071546105e1906001600160801b031681565b6040516001600160801b039091168152602001610222565b348015610604575f80fd5b506102ce61061336600461266d565b610ebf565b348015610623575f80fd5b506102187f41263d2f619e70e9cb211899844b4cf7322f9939361a152780541ef1d2031cb681565b348015610656575f80fd5b506102ce610665366004612938565b610f44565b348015610675575f80fd5b506102ce611036565b348015610689575f80fd5b506102ce6106983660046129ec565b611072565b3480156106a8575f80fd5b50606a54610452906001600160a01b031681565b3480156106c7575f80fd5b506102ce6106d63660046125e1565b6110c4565b3480156106e6575f80fd5b506102ce6106f536600461266d565b6111f4565b348015610705575f80fd5b50606954610452906001600160a01b031681565b348015610724575f80fd5b50606754606854610733919082565b60408051928352602083019190915201610222565b348015610753575f80fd5b506102ce610762366004612af4565b61133a565b348015610772575f80fd5b5061021861078136600461266d565b606e6020525f908152604090205481565b34801561079d575f80fd5b50606554606654610733919082565b6107b46114c0565b606b546001600160a01b0316156107de57604051630160c95d60e21b815260040160405180910390fd5b606c8190556040518181527f39bb629f3d59f5eddf978050e1f5fabeca2b5d02dfc9c25e84f32e7da1069db4906020015b60405180910390a150565b6108226114c0565b6108366001600160a01b038416838361154c565b816001600160a01b0316836001600160a01b03167ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6488360405161087b91815260200190565b60405180910390a3505050565b6108906114c0565b607180546001600160e01b0316600160e01b63ffffffff8416908102919091179091556040519081527f83b318614a148a5806087ebf98a15a44e2a3fd3f57b829f39f4396c53c6b8cc39060200161080f565b606b546001600160a01b03161561090d57604051630160c95d60e21b815260040160405180910390fd5b606b54600160a01b900465ffffffffffff16421061093e57604051631a8f039560e01b815260040160405180910390fd5b606c5460695461095d916001600160a01b0390911690339030906115b4565b606b80546001600160a01b031916331790556040517f5eca00b8ed745eee61451333090bfa56aa1f2a9e696a2aebe5f1f5b6cef6f2ff9061080f908390612b38565b6001600160a01b037f0000000000000000000000001a23b27ac7775b6220dc4f816b5c6a629e371f191630036109f05760405162461bcd60e51b81526004016109e790612b4a565b60405180910390fd5b7f0000000000000000000000001a23b27ac7775b6220dc4f816b5c6a629e371f196001600160a01b0316610a226115db565b6001600160a01b031614610a485760405162461bcd60e51b81526004016109e790612b96565b610a51816115f6565b604080515f80825260208201909252610a6c918391906116ae565b50565b6001600160a01b038116610a8a57610a856114c0565b610a92565b610a92611818565b6001600160a01b038083165f90815260736020908152604080832093851683529290522054610ac2816001612bf6565b6001600160a01b038481165f81815260736020908152604080832094881680845294825291829020949094555184158152919290917f7e66ef906c77feb2070e6fdd2b3c70d591cf625d18b809c3a21865d8d17e6522910161087b565b610b276114c0565b607180546001600160801b03191660011790556040517fba5b67b940ab06d91fe570b3522545e329c2d970f23e0b6453e76431724402c9905f90a1565b610b6c6114c0565b606b80546001600160d01b0316600160d01b65ffffffffffff8416908102919091179091556040519081527ffdf22e84af74bd4ab6b9646f6370a02bc886ed6ac25882db14e4ebf4b8e3bc7e9060200161080f565b606b545f90600160a01b900465ffffffffffff164210801590610bed5750606b546001600160a01b0316155b15610bf9575060655490565b5060675490565b90565b6001600160a01b037f0000000000000000000000001a23b27ac7775b6220dc4f816b5c6a629e371f19163003610c4b5760405162461bcd60e51b81526004016109e790612b4a565b7f0000000000000000000000001a23b27ac7775b6220dc4f816b5c6a629e371f196001600160a01b0316610c7d6115db565b6001600160a01b031614610ca35760405162461bcd60e51b81526004016109e790612b96565b610cac826115f6565b610cb8828260016116ae565b5050565b5f306001600160a01b037f0000000000000000000000001a23b27ac7775b6220dc4f816b5c6a629e371f191614610d565760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016109e7565b505f80516020612da083398151915290565b607154600160e01b900463ffffffff165f819003610c005750610e1090565b610d8f6114c0565b606b546001600160a01b031615610db957604051630160c95d60e21b815260040160405180910390fd5b606980546001600160a01b0319166001600160a01b0383169081179091556040517f1db8d6629941dcb63d5e0c927b89c174c714e139a4b9107a49de839d755f5d74905f90a250565b610cb83383836118a4565b5f876001600160401b03811115610e2657610e266126ab565b604051908082528060200260200182016040528015610e4f578160200160208202803683370190505b5090505f886001600160401b03811115610e6b57610e6b6126ab565b604051908082528060200260200182016040528015610e9e57816020015b6060815260200190600190039081610e895790505b509050610eb38a8a8a8a8a8a8a8a8a8a61190a565b50505050505050505050565b610ec76114c0565b6001600160a01b0381165f908152606e6020526040812054610eea906001612bf6565b6001600160a01b0383165f818152606e6020908152604091829020849055905160018414815292935090917f7628ea5f6112a16b36a8239aa208395a8e8f221688cfb3a5461faffb9700abcd910160405180910390a25050565b610f4c6114c0565b606b546001600160a01b0316610f755760405163126ea8e960e31b815260040160405180910390fd5b8015610fa957606b54606c54606954610f9c926001600160a01b039182169291169061154c565b610fa4611f28565b610ff4565b606c54606954610fc6916001600160a01b0390911690339061154c565b610fcf42611ff9565b606b60146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b606b80546001600160a01b031916905560405181151581527f8015c5005d9ad5d85ca80d3f894f08e0159277704c54166e5cff108800fa80cd9060200161080f565b61103e6114c0565b606b546001600160a01b03161561106857604051630160c95d60e21b815260040160405180910390fd5b611070611f28565b565b6110b78b8b8b8b8b8b8b8b8b8b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508d925061190a915050565b5050505050505050505050565b6001600160a01b03821633148015906111495750606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de9906111089033906004016127ac565b602060405180830381865afa158015611123573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111479190612c09565b155b1561116757604051636115324760e11b815260040160405180910390fd5b6001600160a01b038083165f90815260706020908152604080832093851683529290522054611197816001612bf6565b6001600160a01b038481165f81815260706020908152604080832094881680845294825291829020949094555184158152919290917f42343f44c66ea1eaffa334760d3da2cb731d2a0b3b3e30423df997faa36cc95c910161087b565b5f54610100900460ff161580801561121257505f54600160ff909116105b8061122b5750303b15801561122b57505f5460ff166001145b61128e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e7565b5f805460ff1916600117905580156112af575f805461ff0019166101001790555b6001600160a01b0382166112d65760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b0319166001600160a01b0384161790558015610cb8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b606b546001600160a01b03161515806113f45750335f908152606e6020526040902054600114158061137c5750606b54600160a01b900465ffffffffffff1642105b80156113f45750606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906113b39033906004016127ac565b602060405180830381865afa1580156113ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190612c09565b155b1561141257604051636115324760e11b815260040160405180910390fd5b604080518082019091526065805480835260668054602080860182905286359094559285013590556067556068555f61144a42611ff9565b606b805465ffffffffffff60a01b1916600160a01b65ffffffffffff841690810291909117909155604080518635815260208088013590820152908101919091529091507f23aa2e4f757a7bd974085d3e11439a843b137b30905e3ffd51b2097c34aef62e9060600160405180910390a1505050565b606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906114f09033906004016127ac565b602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f9190612c09565b61107057604051633b8d9d7560e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526115af90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261205c565b505050565b6115d5846323b872dd60e01b85858560405160240161157893929190612c24565b50505050565b5f80516020612da0833981519152546001600160a01b031690565b6071546001600160801b03166001036116225760405163229b36d360e01b815260040160405180910390fd5b606a54604051631c86b03760e31b81526001600160a01b039091169063e43581b8906116529033906004016127ac565b602060405180830381865afa15801561166d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116919190612c09565b610a6c57604051633b8d9d7560e21b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156116e1576115af8361212f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561173b575060408051601f3d908101601f1916820190925261173891810190612c48565b60015b61179e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016109e7565b5f80516020612da0833981519152811461180c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016109e7565b506115af8383836121ca565b606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de9906118489033906004016127ac565b602060405180830381865afa158015611863573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118879190612c09565b61107057604051632678482f60e21b815260040160405180910390fd5b6001600160a01b038381165f818152607260209081526040808320868616808552925280832080546001600160a01b0319169588169586179055519092917f65e683f3800bc24dc7a30e42fb2e833290a4725be8b3658038a3f5d502f3d29f91a4505050565b607154600160801b90046bffffffffffffffffffffffff16600203611942576040516306fda65d60e31b815260040160405180910390fd5b60718054600160801b600160e01b031916600160811b179055888015806119695750808814155b806119745750808614155b8061197f5750808414155b8061198b575082518114155b80611997575081518114155b156119b557604051631df89e8b60e01b815260040160405180910390fd5b5f5b81811015611f01575f8c8c838181106119d2576119d2612c5f565b90506020020160208101906119e7919061266d565b90505f8b8b848181106119fc576119fc612c5f565b9050602002016020810190611a11919061266d565b90505f8a8a85818110611a2657611a26612c5f565b9050602002013590505f868581518110611a4257611a42612c5f565b60200260200101519050836001600160a01b0316336001600160a01b031614158015611a775750326001600160a01b03851614155b8015611aa35750335f9081526073602090815260408083206001600160a01b0387168452909152902054155b8015611ac65750335f908152607360209081526040808320838052909152902054155b8015611af257506001600160a01b0384165f908152607060209081526040808320338452909152902054155b8015611b1e57506001600160a01b0384165f908152607060209081526040808320838052909152902054155b8015611b965750606a5460405163521d4de960e01b81526001600160a01b039091169063521d4de990611b559033906004016127ac565b602060405180830381865afa158015611b70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b949190612c09565b155b15611bb457604051630b094f2760e31b815260040160405180910390fd5b5f848484604051602001611bca93929190612c24565b604051602081830303815290604052805190602001209050611c40818c8c89818110611bf857611bf8612c5f565b9050602002810190611c0a9190612c73565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506121ee92505050565b611c5d576040516309bde33960e01b815260040160405180910390fd5b6001600160a01b038086165f908152606d60209081526040808320938816835292905290812054611c97906001600160d01b031685612bf6565b90506040518060600160405280611cad866122ff565b6001600160d01b031681526020014265ffffffffffff168152602001611cd1610bc1565b90526001600160a01b038781165f818152606d60209081526040808320948b168084529482529182902085518683015165ffffffffffff16600160d01b026001600160d01b039091161781559482015160019095019490945551848152919290917ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683910160405180910390a35f8a8881518110611d7057611d70612c5f565b60200260200101519050866001600160a01b0316336001600160a01b0316141580611da257506001600160a01b038116155b15611e16576001600160a01b038088165f9081526072602090815260408083208a851684529091529020541680611dfa57506001600160a01b038088165f908152607260209081526040808320838052909152902054165b6001600160a01b038116611e1057879150611e14565b8091505b505b8115611eef57611e306001600160a01b038716828461154c565b835115611eef57604051635f20da2d60e01b81525f906001600160a01b03831690635f20da2d90611e6b908b908b9088908b90600401612cb8565b6020604051808303815f875af1158015611e87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eab9190612c48565b90507f41263d2f619e70e9cb211899844b4cf7322f9939361a152780541ef1d2031cb68114611eed5760405163ee418e3760e01b815260040160405180910390fd5b505b876001019750505050505050506119b7565b505060718054600160801b600160e01b031916600160801b17905550505050505050505050565b6040805180820190915260675480825260685460208301819052606b805465ffffffffffff60a01b191690556065919091556066555f611f66610d68565b6040519091507f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee6905f90a1815160208301517f23aa2e4f757a7bd974085d3e11439a843b137b30905e3ffd51b2097c34aef62e919063ffffffff8416611fcc8142612cea565b611fd69190612d1a565b60408051938452602084019290925265ffffffffffff169082015260600161132e565b5f80612003610d68565b606b5490915063ffffffff821690600160d01b900465ffffffffffff168161202c600187612d44565b6120369190612cea565b612041906001612d6a565b61204b9190612d6a565b6120559190612d1a565b9392505050565b5f6120b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661236b9092919063ffffffff16565b905080515f14806120d05750808060200190518101906120d09190612c09565b6115af5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e7565b6001600160a01b0381163b61219c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016109e7565b5f80516020612da083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6121d383612381565b5f825111806121df5750805b156115af576115d583836123c0565b80515f908390825b818110156122c75784818151811061221057612210612c5f565b6020026020010151831015612271578285828151811061223257612232612c5f565b6020026020010151604051602001612254929190918252602082015260400190565b6040516020818303038152906040528051906020012092506122bf565b84818151811061228357612283612c5f565b6020026020010151836040516020016122a6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6001016121f6565b505f6122d1610bc1565b9050806122f1576040516301295acb60e31b815260040160405180910390fd5b919091149150505b92915050565b5f6001600160d01b038211156123675760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663038206269747360c81b60648201526084016109e7565b5090565b606061237984845f856123e5565b949350505050565b61238a8161212f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606120558383604051806060016040528060278152602001612dc0602791396124bc565b6060824710156124465760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e7565b5f80866001600160a01b031685876040516124619190612d89565b5f6040518083038185875af1925050503d805f811461249b576040519150601f19603f3d011682016040523d82523d5f602084013e6124a0565b606091505b50915091506124b187838387612530565b979650505050505050565b60605f80856001600160a01b0316856040516124d89190612d89565b5f60405180830381855af49150503d805f8114612510576040519150601f19603f3d011682016040523d82523d5f602084013e612515565b606091505b509150915061252686838387612530565b9695505050505050565b6060831561259e5782515f03612597576001600160a01b0385163b6125975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e7565b5081612379565b61237983838151156125b35781518083602001fd5b8060405162461bcd60e51b81526004016109e79190612b38565b6001600160a01b0381168114610a6c575f80fd5b5f80604083850312156125f2575f80fd5b82356125fd816125cd565b9150602083013561260d816125cd565b809150509250929050565b5f60208284031215612628575f80fd5b5035919050565b5f805f60608486031215612641575f80fd5b833561264c816125cd565b9250602084013561265c816125cd565b929592945050506040919091013590565b5f6020828403121561267d575f80fd5b8135612055816125cd565b5f60208284031215612698575f80fd5b813563ffffffff81168114612055575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156126e7576126e76126ab565b604052919050565b5f6001600160401b03831115612707576127076126ab565b61271a601f8401601f19166020016126bf565b905082815283838301111561272d575f80fd5b828260208301375f602084830101529392505050565b5f60208284031215612753575f80fd5b81356001600160401b03811115612768575f80fd5b8201601f81018413612778575f80fd5b612379848235602084016126ef565b5f60208284031215612797575f80fd5b813565ffffffffffff81168114612055575f80fd5b6001600160a01b0391909116815260200190565b5f82601f8301126127cf575f80fd5b612055838335602085016126ef565b5f80604083850312156127ef575f80fd5b82356127fa816125cd565b915060208301356001600160401b03811115612814575f80fd5b612820858286016127c0565b9150509250929050565b5f8083601f84011261283a575f80fd5b5081356001600160401b03811115612850575f80fd5b6020830191508360208260051b850101111561286a575f80fd5b9250929050565b5f805f805f805f806080898b031215612888575f80fd5b88356001600160401b038082111561289e575f80fd5b6128aa8c838d0161282a565b909a50985060208b01359150808211156128c2575f80fd5b6128ce8c838d0161282a565b909850965060408b01359150808211156128e6575f80fd5b6128f28c838d0161282a565b909650945060608b013591508082111561290a575f80fd5b506129178b828c0161282a565b999c989b5096995094979396929594505050565b8015158114610a6c575f80fd5b5f60208284031215612948575f80fd5b81356120558161292b565b5f82601f830112612962575f80fd5b813560206001600160401b038083111561297e5761297e6126ab565b8260051b61298d8382016126bf565b93845285810183019383810190888611156129a6575f80fd5b84880192505b858310156129e0578235848111156129c2575f80fd5b6129d08a87838c01016127c0565b83525091840191908401906129ac565b98975050505050505050565b5f805f805f805f805f805f60c08c8e031215612a06575f80fd5b6001600160401b03808d351115612a1b575f80fd5b612a288e8e358f0161282a565b909c509a5060208d0135811015612a3d575f80fd5b612a4d8e60208f01358f0161282a565b909a50985060408d0135811015612a62575f80fd5b612a728e60408f01358f0161282a565b909850965060608d0135811015612a87575f80fd5b612a978e60608f01358f0161282a565b909650945060808d0135811015612aac575f80fd5b612abc8e60808f01358f0161282a565b909450925060a08d0135811015612ad1575f80fd5b50612ae28d60a08e01358e01612953565b90509295989b509295989b9093969950565b5f60408284031215612b04575f80fd5b50919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6120556020830184612b0a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156122f9576122f9612be2565b5f60208284031215612c19575f80fd5b81516120558161292b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215612c58575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112612c88575f80fd5b8301803591506001600160401b03821115612ca1575f80fd5b6020019150600581901b360382131561286a575f80fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061252690830184612b0a565b5f65ffffffffffff80841680612d0e57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b65ffffffffffff818116838216028082169190828114612d3c57612d3c612be2565b505092915050565b65ffffffffffff828116828216039080821115612d6357612d63612be2565b5092915050565b65ffffffffffff818116838216019080821115612d6357612d63612be2565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d0305121bc27e5b3c83de82b9ca31a780197fe979530941ed14a581bbf57841d64736f6c63430008190033