UNPKG

bnpl

Version:

The smart contracts for bnpl

1,347 lines 86.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Consideration", "sourceName": "contracts/lib/Consideration.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "conduitController", "type": "address" }, { "internalType": "address", "name": "shadowToken", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "BadContractSignature", "type": "error" }, { "inputs": [], "name": "BadFraction", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BadReturnValueFromERC20OnTransfer", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "v", "type": "uint8" } ], "name": "BadSignatureV", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "orderIndex", "type": "uint256" }, { "internalType": "uint256", "name": "considerationIndex", "type": "uint256" }, { "internalType": "uint256", "name": "shortfallAmount", "type": "uint256" } ], "name": "ConsiderationNotMet", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "identifiers", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "ERC1155BatchTransferGenericFailure", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EtherTransferGenericFailure", "type": "error" }, { "inputs": [], "name": "InsufficientEtherSupplied", "type": "error" }, { "inputs": [], "name": "Invalid1155BatchTransferEncoding", "type": "error" }, { "inputs": [], "name": "InvalidBasicOrderParameterEncoding", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "conduit", "type": "address" } ], "name": "InvalidCallToConduit", "type": "error" }, { "inputs": [], "name": "InvalidCanceller", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" }, { "internalType": "address", "name": "conduit", "type": "address" } ], "name": "InvalidConduit", "type": "error" }, { "inputs": [], "name": "InvalidERC721TransferAmount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "InvalidMsgValue", "type": "error" }, { "inputs": [], "name": "InvalidNativeOfferItem", "type": "error" }, { "inputs": [], "name": "InvalidOrderParameters", "type": "error" }, { "inputs": [], "name": "InvalidSignature", "type": "error" }, { "inputs": [], "name": "InvalidSigner", "type": "error" }, { "inputs": [], "name": "InvalidTime", "type": "error" }, { "inputs": [], "name": "MissingItemAmount", "type": "error" }, { "inputs": [], "name": "MissingOriginalConsiderationItems", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NoContract", "type": "error" }, { "inputs": [], "name": "NoReentrantCalls", "type": "error" }, { "inputs": [], "name": "NoSpecifiedOrdersAvailable", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderAlreadyFilled", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderAlreadyFinalized", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderAlreadyStarted", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderExpired", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderInvalidRepayParameters", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderIsCancelled", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderNotExpired", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderNotStarted", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderNotValidated", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "OrderPartiallyFilled", "type": "error" }, { "inputs": [], "name": "PartialFillsNotEnabledForOrder", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokenTransferGenericFailure", "type": "error" }, { "inputs": [], "name": "UnusedItemParameters", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newCounter", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "offerer", "type": "address" } ], "name": "CounterIncremented", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "offerer", "type": "address" } ], "name": "OrderBroken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "offerer", "type": "address" } ], "name": "OrderCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "offerer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "fulfiller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shadowId", "type": "uint256" } ], "name": "OrderFulfilled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "payTimes", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "finalized", "type": "bool" } ], "name": "OrderRepaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "offerer", "type": "address" } ], "name": "OrderValidated", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" } ], "internalType": "struct OrderParameters", "name": "parameters", "type": "tuple" } ], "name": "breakOrder", "outputs": [ { "internalType": "bool", "name": "broken", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "counter", "type": "uint256" } ], "internalType": "struct OrderComponents[]", "name": "orders", "type": "tuple[]" } ], "name": "cancel", "outputs": [ { "internalType": "bool", "name": "cancelled", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" } ], "internalType": "struct OrderParameters", "name": "parameters", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct Order", "name": "order", "type": "tuple" }, { "internalType": "bytes32", "name": "fulfillerConduitKey", "type": "bytes32" } ], "name": "fulfillOrder", "outputs": [ { "internalType": "bool", "name": "fulfilled", "type": "bool" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "offerer", "type": "address" } ], "name": "getCounter", "outputs": [ { "internalType": "uint256", "name": "counter", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "counter", "type": "uint256" } ], "internalType": "struct OrderComponents", "name": "order", "type": "tuple" } ], "name": "getOrderHash", "outputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } ], "name": "getOrderStatus", "outputs": [ { "internalType": "bool", "name": "isValidated", "type": "bool" }, { "internalType": "bool", "name": "isCancelled", "type": "bool" }, { "internalType": "bool", "name": "isFinalized", "type": "bool" }, { "internalType": "bool", "name": "isBroken", "type": "bool" }, { "internalType": "address", "name": "fulfiller", "type": "address" }, { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, { "internalType": "uint256", "name": "shadowId", "type": "uint256" }, { "internalType": "uint256", "name": "paidTimes", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "incrementCounter", "outputs": [ { "internalType": "uint256", "name": "newCounter", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "information", "outputs": [ { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "bytes32", "name": "domainSeparator", "type": "bytes32" }, { "internalType": "address", "name": "conduitController", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" } ], "internalType": "struct OrderParameters", "name": "parameters", "type": "tuple" }, { "internalType": "bytes32", "name": "fulfillerConduitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "payTimes", "type": "uint256" } ], "name": "repayOrder", "outputs": [ { "internalType": "bool", "name": "repaid", "type": "bool" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "shadowToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifier", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "platform", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "periods", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }, { "internalType": "uint256", "name": "royalty", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawFee", "type": "uint256" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" } ], "internalType": "struct OrderParameters", "name": "parameters", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct Order[]", "name": "orders", "type": "tuple[]" } ], "name": "validate", "outputs": [ { "internalType": "bool", "name": "validated", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x6101a06040523480156200001257600080fd5b506040516200380d3803806200380d8339810160408190526200003591620004aa565b818181818082808080806200004962000137565b60e05260c081815260a0838152608085815246610100819052604080516020818101979097528082019890985260608801969096529086015230858201528351808603909101815293019091528151910120610120526001600160a01b03811661014081905260408051630a96ad3960e01b81528151630a96ad39926004808401939192918290030181865afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e9190620004e2565b5061016052505060016000555050506001600160a01b0316610180525062000507945050505050565b60008080806200016760408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b805160209182012060408051808201825260038152620312e360ec1b90840152519095507fe6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b39450600091620003c291016f09ee4c8cae486dedae0dedccadce8e6560831b81526f1859191c995cdcc81bd999995c995c8b60821b60108201526d1859191c995cdcc81d1bdad95b8b60921b60208201527f75696e74323536206964656e7469666965722c00000000000000000000000000602e820152701859191c995cdcc818dd5c9c995b98de4b607a1b60418201526e1859191c995cdcc8185c9d1a5cdd0b608a1b6052820152701859191c995cdcc81c1b185d199bdc9b4b607a1b6061820152711d5a5b9d0c8d4d881cdd185c9d151a5b594b60721b60728201526f1d5a5b9d0c8d4d88195b99151a5b594b60821b6084820152701d5a5b9d0c8d4d88191d5c985d1a5bdb8b607a1b60948201526f1d5a5b9d0c8d4d881c195c9a5bd91ccb60821b60a58201526e1d5a5b9d0c8d4d88185b5bdd5b9d0b608a1b60b58201526d1d5a5b9d0c8d4d881c985d1a5bcb60921b60c48201526f1d5a5b9d0c8d4d881c9bde585b1d1e4b60821b60d28201526b1d5a5b9d0c8d4d881999594b60a21b60e28201527f75696e743235362077697468647261774665652c00000000000000000000000060ee8201526c1d5a5b9d0c8d4d881cd85b1d0b609a1b6101028201527f6279746573333220636f6e647569744b65792c0000000000000000000000000061010f8201526e3ab4b73a191a9b1031b7bab73a32b960891b610122820152602960f81b6101318201526101320190565b60408051601f19818403018152908290526c08a92a06e626488dedac2d2dc5609b1b60208301526b1cdd1c9a5b99c81b985b594b60a21b602d8301526e1cdd1c9a5b99c81d995c9cda5bdb8b608a1b60398301526f1d5a5b9d0c8d4d8818da185a5b92590b60821b60488301527f6164647265737320766572696679696e67436f6e7472616374000000000000006058830152602960f81b60718301529150607201604051602081830303815290604052805190602001209250808051906020012091505090919293565b80516001600160a01b0381168114620004a557600080fd5b919050565b60008060408385031215620004be57600080fd5b620004c9836200048d565b9150620004d9602084016200048d565b90509250929050565b60008060408385031215620004f657600080fd5b505080516020909101519092909150565b60805160a05160c05160e051610100516101205161014051610160516101805161326b620005a26000396000818161026e015281816120280152818161270c0152818161279201526129da015260006120e4015260008181610ef801526120a201526000611dbe01526000611cee01526000818161051d01526107c701526000611d1c01526000611d6a01526000611d42015261326b6000f3fe6080604052600436106100bc5760003560e01c8063b86ae9e111610074578063f07ec3731161004e578063f07ec37314610218578063f47b774014610238578063ffc5d97a1461025c57600080fd5b8063b86ae9e1146101d2578063be92d18e146101f2578063d9e534111461020557600080fd5b80635b34b966116100a55780635b34b9661461016f5780639432cc1d14610192578063a3210e7c146101b257600080fd5b806322378003146100c157806346423aa7146100f6575b600080fd5b3480156100cd57600080fd5b506100e16100dc366004612c48565b6102b5565b60405190151581526020015b60405180910390f35b34801561010257600080fd5b50610116610111366004612cbd565b6102c8565b604080519815158952961515602089015294151595870195909552911515606086015273ffffffffffffffffffffffffffffffffffffffff16608085015260a084015260c083019190915260e0820152610100016100ed565b34801561017b57600080fd5b5061018461035b565b6040519081526020016100ed565b34801561019e57600080fd5b506100e16101ad366004612cd6565b61036a565b3480156101be57600080fd5b506100e16101cd366004612d53565b610376565b3480156101de57600080fd5b506101846101ed366004612d83565b610387565b6100e1610200366004612da0565b610556565b6100e1610213366004612de5565b610562565b34801561022457600080fd5b50610184610233366004612e45565b610577565b34801561024457600080fd5b5061024d6105a2565b6040516100ed93929190612e60565b34801561026857600080fd5b506102907f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b60006102c183836105ba565b9392505050565b600080600080600080600080610340896000908152600260208190526040909120805460018201549282015460039092015460ff8083169561010084048216956201000085048316956301000000860490931694640100000000900473ffffffffffffffffffffffffffffffffffffffff1693909291565b97509750975097509750975097509750919395975091939597565b600061036561090a565b905090565b60006102c18383610967565b600061038182610b27565b92915050565b60408051610220810190915260009061038190806103a86020860186612e45565b73ffffffffffffffffffffffffffffffffffffffff1681526020018460200160208101906103d69190612e45565b73ffffffffffffffffffffffffffffffffffffffff16815260408086013560208301520161040a6080860160608701612e45565b73ffffffffffffffffffffffffffffffffffffffff16815260200161043560a0860160808701612e45565b73ffffffffffffffffffffffffffffffffffffffff16815260200161046060c0860160a08701612e45565b73ffffffffffffffffffffffffffffffffffffffff1681526020018460c0013581526020018460e00135815260200184610100013581526020018461012001358152602001846101400135815260200184610160013581526020018461018001358152602001846101a001358152602001846101c001358152602001846101e0013581526020018461020001358152508361022001357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180517f0000000000000000000000000000000000000000000000000000000000000000825261022090930180519281526102608220939091525290565b60006102c18383610c2c565b600061056f848484610daf565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812054610381565b60606000806105af610ed7565b925092509250909192565b60006105c4610f52565b6000808084815b818110156108fc57368888838181106105e6576105e6612ef9565b90506020028101906105f89190612f28565b9050806106086020820182612e45565b94506108006040518061022001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018360200160208101906106489190612e45565b73ffffffffffffffffffffffffffffffffffffffff16815260408085013560208301520161067c6080850160608601612e45565b73ffffffffffffffffffffffffffffffffffffffff1681526020016106a760a0850160808601612e45565b73ffffffffffffffffffffffffffffffffffffffff1681526020016106d260c0850160a08601612e45565b73ffffffffffffffffffffffffffffffffffffffff1681526020018360c0013581526020018360e00135815260200183610100013581526020018361012001358152602001836101400135815260200183610160013581526020018361018001358152602001836101a001358152602001836101c001358152602001836101e0013581526020018361020001358152506107a08360000160208101906107789190612e45565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180517f0000000000000000000000000000000000000000000000000000000000000000825261022090930180519281526102608220939091525290565b60008181526002602052604090209750955061081f8688600180610f90565b50865460ff166108f257610876858761083c610220860186612f66565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110d292505050565b86547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117875560405173ffffffffffffffffffffffffffffffffffffffff8616907f09e126c208c7c6b8de91fb519ff46ef1f6eb471f6376862ca4de42ea000026d6906108e99089815260200190565b60405180910390a25b50506001016105cb565b506001979650505050505050565b6000610914610f52565b503360008181526001602081815260409283902080549092019182905591518181529092917f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f910160405180910390a290565b6000610971610f52565b60008083815b81811015610b1a573687878381811061099257610992612ef9565b610240029190910191506109ab90506020820182612e45565b93503373ffffffffffffffffffffffffffffffffffffffff8516146109fc576040517f80ec737400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a3c6040518061022001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018460200160208101906103d69190612e45565b6000818152600260205260409020600181015490975090915015610a94576040517f9633f278000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b85547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661010017865560405173ffffffffffffffffffffffffffffffffffffffff8616907fa6eb7cdc219e1518ced964e9a34e61d68a94e4f1569db3e84256ba981ba5275390610b089084815260200190565b60405180910390a25050600101610977565b5060019695505050505050565b600080600080610b3885600161114f565b92509250925080610b4e57506000949350505050565b610b7f6002610b636040880160208901612e45565b30610b7160208a018a612e45565b60408a01356001600061129b565b6000610b916080870160608801612e45565b73ffffffffffffffffffffffffffffffffffffffff1603610bbb57610bb6858361138a565b610bc5565b610bc58583611427565b610bd26020860186612e45565b73ffffffffffffffffffffffffffffffffffffffff167fe68e1577ba456c32a752dbe4fa63fbaa46841e7e54bc9667d021b9af64a1cada84604051610c1991815260200190565b60405180910390a2506001949350505050565b600080600080610c3d8660016114df565b92509250925081610c545760009350505050610381565b856000610c648260018084611656565b90506000610c786080840160608501612e45565b73ffffffffffffffffffffffffffffffffffffffff1603610cd757610cc86002610ca86040850160208601612e45565b610cb56020860186612e45565b308660400135600188610200013561129b565b610cd28282611845565b610d3a565b604080516020808252818301909252600091602082018180368337019050509050610d2c610d0b6040850160208601612e45565b610d186020860186612e45565b3086604001356001886102000135876118fe565b610d3883838a84611964565b505b610d476020830183612e45565b6040805187815233602082015290810185905273ffffffffffffffffffffffffffffffffffffffff91909116907fe8b2cfa73a11bd60479d92890aeb77bc5f502014ec530c3f0c1774d51680f0a69060600160405180910390a2506001979650505050505050565b6000806000806000610dc388876001611a85565b929650909450909250905080610de05760009450505050506102c1565b506000610df08887600085611656565b90506000610e0460808a0160608b01612e45565b73ffffffffffffffffffffffffffffffffffffffff1603610e2e57610e298882611845565b610e5d565b604080516020808252818301909252600091602082018180368337019050509050610e5b89838a84611964565b505b8115610e8857610e886002610e7860408b0160208c01612e45565b308660408d01356001600061129b565b60408051858152602081018890528315158183015290517f6cb64aa506cc92732fc83160c8ea61203b5a13a8cf92e5b5c7ccc4ba6bb41d389181900360600190a1506001979650505050505050565b6060600080610ee4611cea565b6040805160038082528183019092529193507f0000000000000000000000000000000000000000000000000000000000000000925060208201818036833750507f312e3100000000000000000000000000000000000000000000000000000000006020830152509391925090565b600160005414610f8e576040517f7fa8a98700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8254600090610100900460ff1615610fe5578115610fdd576040517f1a51557400000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b50600061056f565b835462010000900460ff1615611030578115610fdd576040517f836f8ef900000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b82156110805760038401541561107b578115610fdd576040517f9633f27800000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b6110c7565b83600301546000036110c7578115610fdd576040517fe567c93e00000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b506001949350505050565b3373ffffffffffffffffffffffffffffffffffffffff8416036110f457505050565b600061113c611101611cea565b7f1901000000000000000000000000000000000000000000000000000000000000600090815260029190915260228581526042822091905290565b9050611149848284611de0565b50505050565b6000808061117561116536879003870187613023565b6107a06107786020890189612e45565b600081815260026020526040902080549194509060ff166111d55784156111cb576040517fa4c58ff600000000000000000000000000000000000000000000000000000000815260048101859052602401610a8b565b5060009050611294565b806003015492506111e98482600088610f90565b6111f7575060009050611294565b4261120761010088013585613146565b82600101546112169190613183565b11156112575784156111cb576040517f031ea4cb00000000000000000000000000000000000000000000000000000000815260048101859052602401610a8b565b6112648160020154611ff9565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1663010100001790555060015b9250925092565b801561131057600060405190507f4ce34aa200000000000000000000000000000000000000000000000000000000815260206004820152600160248201528760448201528660648201528560848201528460a48201528360c48201528260e482015261130a828261010461209c565b50611381565b60028760038111156113245761132461319b565b036113745781600114611363576040517fefcc00b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61136f86868686612238565b611381565b6113818686868686612347565b50505050505050565b6113be61139a6020840184612e45565b826113af6101208601356101808701356131ca565b6113b99190613146565b612479565b6000816113d56101208501356101408601356131ca565b6113df9190613146565b90506127106113f361016085013583613146565b6113fd91906131ca565b6114079082613205565b905061142261141c60c0850160a08601612e45565b82612479565b505050565b61146b61143a6080840160608501612e45565b6114476020850185612e45565b8361145c6101208701356101808801356131ca565b6114669190613146565b6124ee565b6000816114826101208501356101408601356131ca565b61148c9190613146565b90506127106114a061016085013583613146565b6114aa91906131ca565b6114b49082613205565b90506114226114c96080850160608601612e45565b6114d960c0860160a08701612e45565b836124ee565b60008080846114f760c082013560e083013587612656565b61150b575060009250829150819050611294565b60028161012001351015611561578415611551576040517f0a199cb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009250829150819050611294565b61158361157336839003830183613023565b6107a06107786020850185612e45565b60008181526002602052604090209094506115a18582600189610f90565b6115b45750600092508291506112949050565b805460ff166115dc576115dc6115cd6020840184612e45565b8661083c6102208b018b612f66565b611600336115f06040850160208601612e45565b84604001358561010001356126b5565b815460017fffffffffffffffff000000000000000000000000000000000000000000ff00009091163364010000000002178117835542818401556002830182905560039092018290559497909650939450505050565b6116816040518060800160405280600081526020016000815260200160008152602001600081525090565b60008061169386610120890135613205565b6101c088013560408501529050831561177f576116ba6101208801356101808901356131ca565b6116c49082613146565b6116d390610180890135613205565b91506116e96101208801356101408901356131ca565b6116f39082613146565b61170290610140890135613205565b835260408301518290826127106101608b01356117296101208d01356101408e01356131ca565b6117339190613146565b61173d91906131ca565b6117479190613146565b611756906101408b0135613205565b6117609190613205565b61176a9190613205565b6020840152610180870135606084015261183b565b6117936101208801356101808901356131ca565b61179d9087613146565b91506117b36101208801356101408901356131ca565b6117bd9087613146565b80845260408401518391612710906117db906101608c013590613146565b6117e591906131ca565b6117ef9190613205565b6117f99190613205565b6020840152841561183b57866101a001358360000181815161181b9190613183565b9052506040830180516101a08901359190611837908390613183565b9052505b5050949350505050565b80513490811015611882576040517f1a783b8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61189c6118926020850185612e45565b8360200151612479565b6118b96118af60c0850160a08601612e45565b8360400151612479565b6060820151156118e0576118e06118d660a0850160808601612e45565b8360600151612479565b81516118ec9082613205565b90508015611422576114223382612479565b6119088183612862565b816119535782600114611947576040517fefcc00b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61136f87878787612238565b611381828260028a8a8a8a8a612881565b3360006119776080870160608801612e45565b905061199a818361198e60c08a0160a08b01612e45565b8860400151888861291a565b6060850151156119c5576119c581836119b960a08a0160808b01612e45565b8860600151888861291a565b606085015160408601518651600092916119de91613205565b6119e89190613205565b905085602001518110611a4157611a138284611a0760208b018b612e45565b8960200151898961291a565b6020860151611a229082613205565b90508015611a3857611a3882843084898961291a565b61136f84612955565b611a5b8284611a5360208b018b612e45565b84898961291a565b611a6484612955565b61138182611a7560208a018a612e45565b8389602001516114669190613205565b6000808080611aac611a9c36899003890189613023565b6107a061077860208b018b612e45565b600081815260026020526040902080549195509060ff16611b12578515611b02576040517fa4c58ff600000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b5060009250829150819050611ce1565b611b1f8582600089610f90565b611b33575060009250829150819050611ce1565b876101200135878260030154611b499190613183565b1180611b555750600187105b15611b95578515611b02576040517fc8910ec000000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b428861010001358260030154611bab9190613146565b8260010154611bba9190613183565b1015611bfb578515611b02576040517f2e775cae00000000000000000000000000000000000000000000000000000000815260048101869052602401610a8b565b86816003016000828254611c0f9190613183565b909155505060038101546101208901359003611c675780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000178155600281015460019250611c6290611ff9565b611cbb565b805460028201546003830154611cbb92640100000000900473ffffffffffffffffffffffffffffffffffffffff169190611ca7906101008d013590613146565b8460010154611cb69190613183565b61297e565b54640100000000900473ffffffffffffffffffffffffffffffffffffffff169250600191505b93509350935093565b60007f00000000000000000000000000000000000000000000000000000000000000004614611dbb57610365604080517f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f00000000000000