[ { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_nftId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_nftAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "_seller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_buyer", "type": "address" } ], "name": "Buy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_nftId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_nftAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_stackId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "_stacker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "stackingTime", "type": "uint256" }, { "indexed": false, "internalType": "enum RWA.StackingTime", "name": "_stackOptions", "type": "uint8" } ], "name": "Stack", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "_seller", "type": "address" }, { "internalType": "address", "name": "_payoutCurrency", "type": "address" }, { "internalType": "uint256", "name": "_nftId", "type": "uint256" }, { "internalType": "uint256", "name": "_nftAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_payoutAmount", "type": "uint256" }, { "internalType": "enum RWA.StackingTime", "name": "_stackOptions", "type": "uint8" } ], "internalType": "struct RWA.BuyInfo", "name": "_buy", "type": "tuple" } ], "name": "buy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_buyer", "type": "address" } ], "name": "buyerStackId", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_seller", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_seller", "type": "address" } ], "name": "sellerNFTId", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_seller", "type": "address" }, { "internalType": "uint256", "name": "_nftId", "type": "uint256" }, { "internalType": "uint256", "name": "_nftAmount", "type": "uint256" } ], "name": "transferStuckNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "_stackId", "type": "uint256" }, { "internalType": "uint256", "name": "_nftAmount", "type": "uint256" }, { "internalType": "uint256", "name": "rewardAmount", "type": "uint256" }, { "internalType": "address", "name": "rewardCurrency", "type": "address" }, { "internalType": "enum RWA.WithdrawOptions", "name": "_withdrawOptions", "type": "uint8" }, { "internalType": "enum RWA.StackingTime", "name": "stackOptions", "type": "uint8" } ], "internalType": "struct RWA.StackInfo", "name": "_stackInfo", "type": "tuple" } ], "name": "unstack", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "userInfo", "outputs": [ { "internalType": "uint256", "name": "_nftId", "type": "uint256" }, { "internalType": "uint256", "name": "_nftAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_stackingTime", "type": "uint256" }, { "internalType": "uint256", "name": "_stackCompleteTime", "type": "uint256" }, { "internalType": "enum RWA.StackingTime", "name": "stackOptions", "type": "uint8" }, { "internalType": "bool", "name": "_complete", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b50613f6a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80637110ae03116100b8578063c4d66de81161007c578063c4d66de814610374578063e985e9c514610390578063f23a6e61146103c0578063f242432a146103f0578063f2fde38b1461040c578063f7e6bc1c1461042857610136565b80637110ae03146102d0578063715018a6146103005780638da5cb5b1461030a578063a22cb46514610328578063bc197c811461034457610136565b80632c074e5e116100ff5780632c074e5e1461021c5780632eb2c2d61461024c57806340c10f19146102685780634e1273f414610284578063692026c1146102b457610136565b8062fdd58e1461013b57806301ffc9a71461016b5780630e5efa881461019b5780630e89341c146101b757806321ce919d146101e7575b600080fd5b610155600480360381019061015091906127e5565b610444565b6040516101629190612834565b60405180910390f35b610185600480360381019061018091906128a7565b6104ad565b60405161019291906128ef565b60405180910390f35b6101b560048036038101906101b09190612a60565b6104bf565b005b6101d160048036038101906101cc9190612a8d565b610652565b6040516101de9190612b39565b60405180910390f35b61020160048036038101906101fc91906127e5565b6106f5565b60405161021396959493929190612bd2565b60405180910390f35b61023660048036038101906102319190612c33565b610758565b6040516102439190612d1e565b60405180910390f35b61026660048036038101906102619190612ec2565b6107ef565b005b610282600480360381019061027d91906127e5565b610897565b005b61029e60048036038101906102999190613054565b6109aa565b6040516102ab9190612d1e565b60405180910390f35b6102ce60048036038101906102c99190613191565b610ab9565b005b6102ea60048036038101906102e59190612c33565b610e25565b6040516102f79190612d1e565b60405180910390f35b610308610ebc565b005b610312610ed0565b60405161031f91906131cd565b60405180910390f35b610342600480360381019061033d9190613214565b610f08565b005b61035e60048036038101906103599190612ec2565b610f1e565b60405161036b9190613263565b60405180910390f35b61038e60048036038101906103899190612c33565b610f33565b005b6103aa60048036038101906103a5919061327e565b6110da565b6040516103b791906128ef565b60405180910390f35b6103da60048036038101906103d591906132be565b61117c565b6040516103e79190613263565b60405180910390f35b61040a600480360381019061040591906132be565b611191565b005b61042660048036038101906104219190612c33565b611239565b005b610442600480360381019061043d9190613355565b6112bf565b005b60008061044f61130e565b905080600001600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505092915050565b60006104b882611336565b9050919050565b60008160800151141580156104d957506000816060015114155b610518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050f9061341a565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33836000015184608001516040518463ffffffff1660e01b81526004016105619392919061343a565b6020604051808303816000875af1158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190613486565b506105ef3033836040015184606001516040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152506113b0565b610606816040015182606001518360a001516114bb565b7f73ee6083753970c82cf2d93ff7bb0432e00e0155c4096741ea134c74f67eb02b8160400151826060015183600001513360405161064794939291906134b3565b60405180910390a150565b6060600061065e61130e565b905080600201805461066f90613527565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90613527565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050915050919050565b6000602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16905086565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156107e357602002820191906000526020600020905b8154815260200190600101908083116107cf575b50505050509050919050565b60006107f96117b1565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561083e575061083c86826110da565b155b156108825780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610879929190613558565b60405180910390fd5b61088f86868686866117b9565b505050505050565b61089f6118b1565b600360008154809291906108b2906135b0565b91905055506108fa82600354836040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611938565b61093e8230600354846040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152506113b0565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060035490806001815401808255809150506001900390600052602060002001600090919091909150555050565b606081518351146109f657815183516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016109ed9291906135f8565b60405180910390fd5b6000835167ffffffffffffffff811115610a1357610a12612920565b5b604051908082528060200260200182016040528015610a415781602001602082028036833780820191505090505b50905060005b8451811015610aae57610a7e610a6682876119d190919063ffffffff16565b610a7983876119e590919063ffffffff16565b610444565b828281518110610a9157610a90613621565b5b60200260200101818152505080610aa7906135b0565b9050610a47565b508091505092915050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360000151815260200190815260200160002090506000816001015414158015610b2a57506000816000015414155b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b60906136c2565b60405180910390fd5b6000826040015103610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613754565b60405180910390fd5b4281600301541115610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906137e6565b60405180910390fd5b600015158160040160019054906101000a900460ff16151514610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613878565b60405180910390fd5b816060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd610c77610ed0565b3385604001516040518463ffffffff1660e01b8152600401610c9b9392919061343a565b6020604051808303816000875af1158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde9190613486565b50610d293033836000015484600101546040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152506113b0565b60006001811115610d3d57610d3c612b5b565b5b82608001516001811115610d5457610d53612b5b565b5b03610da5576000826020015114610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d979061390a565b60405180910390fd5b610e04565b6000826020015103610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de3906139c2565b60405180910390fd5b610e03816000015483602001518460a001516114bb565b5b60018160040160016101000a81548160ff0219169083151502179055505050565b6060600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610eb057602002820191906000526020600020905b815481526020019060010190808311610e9c575b50505050509050919050565b610ec46118b1565b610ece60006119f9565b565b600080610edb611ad0565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b610f1a610f136117b1565b8383611af8565b5050565b600063bc197c8160e01b905095945050505050565b6000610f3d611c77565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015610f8b5750825b9050600060018367ffffffffffffffff16148015610fc0575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610fce575080155b15611005576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156110555760018560000160086101000a81548160ff0219169083151502179055505b61106d60405180602001604052806000815250611c9f565b61107686611cb3565b83156110d25760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516110c99190613a3b565b60405180910390a15b505050505050565b6000806110e561130e565b90508060010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b600063f23a6e6160e01b905095945050505050565b600061119b6117b1565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156111e057506111de86826110da565b155b156112245780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161121b929190613558565b60405180910390fd5b61123186868686866113b0565b505050505050565b6112416118b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b35760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016112aa91906131cd565b60405180910390fd5b6112bc816119f9565b50565b6112c76118b1565b611309308484846040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152506113b0565b505050565b60007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500905090565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806113a957506113a882611cc7565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114225760006040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161141991906131cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036114945760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161148b91906131cd565b60405180910390fd5b6000806114a18585611da9565b915091506114b28787848487611dd9565b50505050505050565b600460008154809291906114ce906135b0565b919050555060008060038111156114e8576114e7612b5b565b5b8260038111156114fb576114fa612b5b565b5b03611516576278614d4261150f9190613a56565b90506115b0565b6001600381111561152a57611529612b5b565b5b82600381111561153d5761153c612b5b565b5b036115585762f0c29a426115519190613a56565b90506115af565b6002600381111561156c5761156b612b5b565b5b82600381111561157f5761157e612b5b565b5b0361159b576301e18534426115949190613a56565b90506115ae565b6303c30a68426115ab9190613a56565b90505b5b5b6040518060c001604052808581526020018481526020014281526020018281526020018360038111156115e6576115e5612b5b565b5b8152602001600015158152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060045481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083600381111561169657611695612b5b565b5b021790555060a08201518160040160016101000a81548160ff021916908315150217905550905050611700333086866040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152506113b0565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060045490806001815401808255809150506001900390600052602060002001600090919091909150557f93c8e6e6af30205260f5a303800e51826e372193da836867e2d8bd9aaa39223884846004543342876040516117a396959493929190613a8a565b60405180910390a150505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361182b5760006040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161182291906131cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361189d5760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161189491906131cd565b60405180910390fd5b6118aa8585858585611dd9565b5050505050565b6118b96117b1565b73ffffffffffffffffffffffffffffffffffffffff166118d7610ed0565b73ffffffffffffffffffffffffffffffffffffffff1614611936576118fa6117b1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161192d91906131cd565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119aa5760006040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016119a191906131cd565b60405180910390fd5b6000806119b78585611da9565b915091506119c9600087848487611dd9565b505050505050565b600060208202602084010151905092915050565b600060208202602084010151905092915050565b6000611a03611ad0565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b6000611b0261130e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b765760006040517fced3e100000000000000000000000000000000000000000000000000000000008152600401611b6d91906131cd565b60405180910390fd5b818160010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3184604051611c6991906128ef565b60405180910390a350505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611ca7611e8b565b611cb081611ecb565b50565b611cbb611e8b565b611cc481611edf565b50565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d9257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611da25750611da182611f65565b5b9050919050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b611de585858585611fcf565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611e84576000611e236117b1565b90506001845103611e73576000611e446000866119e590919063ffffffff16565b90506000611e5c6000866119e590919063ffffffff16565b9050611e6c838989858589612393565b5050611e82565b611e81818787878787612547565b5b505b5050505050565b611e936126fb565b611ec9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611ed3611e8b565b611edc8161271b565b50565b611ee7611e8b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f595760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611f5091906131cd565b60405180910390fd5b611f62816119f9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000611fd961130e565b9050815183511461202557825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260040161201c9291906135f8565b60405180910390fd5b600061202f6117b1565b905060005b845181101561224d57600061205282876119e590919063ffffffff16565b9050600061206983876119e590919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161461219c57600085600001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561214157898183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016121389493929190613aeb565b60405180910390fd5b81810386600001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461223a578085600001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122329190613a56565b925050819055505b505080612246906135b0565b9050612034565b50600184510361230c57600061226d6000866119e590919063ffffffff16565b905060006122856000866119e590919063ffffffff16565b90508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516122fd9291906135f8565b60405180910390a4505061238b565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612382929190613b30565b60405180910390a45b505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b111561253f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123f4959493929190613bbc565b6020604051808303816000875af192505050801561243057506040513d601f19601f8201168201806040525081019061242d9190613c2b565b60015b6124b4573d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b5060008151036124ac57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016124a391906131cd565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461253d57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161253491906131cd565b60405180910390fd5b505b505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b11156126f3578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125a8959493929190613c58565b6020604051808303816000875af19250505080156125e457506040513d601f19601f820116820180604052508101906125e19190613c2b565b60015b612668573d8060008114612614576040519150601f19603f3d011682016040523d82523d6000602084013e612619565b606091505b50600081510361266057846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161265791906131cd565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126f157846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016126e891906131cd565b60405180910390fd5b505b505050505050565b6000612705611c77565b60000160089054906101000a900460ff16905090565b600061272561130e565b9050818160020190816127389190613e62565b505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061277c82612751565b9050919050565b61278c81612771565b811461279757600080fd5b50565b6000813590506127a981612783565b92915050565b6000819050919050565b6127c2816127af565b81146127cd57600080fd5b50565b6000813590506127df816127b9565b92915050565b600080604083850312156127fc576127fb612747565b5b600061280a8582860161279a565b925050602061281b858286016127d0565b9150509250929050565b61282e816127af565b82525050565b60006020820190506128496000830184612825565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128848161284f565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b6000602082840312156128bd576128bc612747565b5b60006128cb84828501612892565b91505092915050565b60008115159050919050565b6128e9816128d4565b82525050565b600060208201905061290460008301846128e0565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129588261290f565b810181811067ffffffffffffffff8211171561297757612976612920565b5b80604052505050565b600061298a61273d565b9050612996828261294f565b919050565b600481106129a857600080fd5b50565b6000813590506129ba8161299b565b92915050565b600060c082840312156129d6576129d561290a565b5b6129e060c0612980565b905060006129f08482850161279a565b6000830152506020612a048482850161279a565b6020830152506040612a18848285016127d0565b6040830152506060612a2c848285016127d0565b6060830152506080612a40848285016127d0565b60808301525060a0612a54848285016129ab565b60a08301525092915050565b600060c08284031215612a7657612a75612747565b5b6000612a84848285016129c0565b91505092915050565b600060208284031215612aa357612aa2612747565b5b6000612ab1848285016127d0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612af4578082015181840152602081019050612ad9565b60008484015250505050565b6000612b0b82612aba565b612b158185612ac5565b9350612b25818560208601612ad6565b612b2e8161290f565b840191505092915050565b60006020820190508181036000830152612b538184612b00565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612b9b57612b9a612b5b565b5b50565b6000819050612bac82612b8a565b919050565b6000612bbc82612b9e565b9050919050565b612bcc81612bb1565b82525050565b600060c082019050612be76000830189612825565b612bf46020830188612825565b612c016040830187612825565b612c0e6060830186612825565b612c1b6080830185612bc3565b612c2860a08301846128e0565b979650505050505050565b600060208284031215612c4957612c48612747565b5b6000612c578482850161279a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c95816127af565b82525050565b6000612ca78383612c8c565b60208301905092915050565b6000602082019050919050565b6000612ccb82612c60565b612cd58185612c6b565b9350612ce083612c7c565b8060005b83811015612d11578151612cf88882612c9b565b9750612d0383612cb3565b925050600181019050612ce4565b5085935050505092915050565b60006020820190508181036000830152612d388184612cc0565b905092915050565b600080fd5b600067ffffffffffffffff821115612d6057612d5f612920565b5b602082029050602081019050919050565b600080fd5b6000612d89612d8484612d45565b612980565b90508083825260208201905060208402830185811115612dac57612dab612d71565b5b835b81811015612dd55780612dc188826127d0565b845260208401935050602081019050612dae565b5050509392505050565b600082601f830112612df457612df3612d40565b5b8135612e04848260208601612d76565b91505092915050565b600080fd5b600067ffffffffffffffff821115612e2d57612e2c612920565b5b612e368261290f565b9050602081019050919050565b82818337600083830152505050565b6000612e65612e6084612e12565b612980565b905082815260208101848484011115612e8157612e80612e0d565b5b612e8c848285612e43565b509392505050565b600082601f830112612ea957612ea8612d40565b5b8135612eb9848260208601612e52565b91505092915050565b600080600080600060a08688031215612ede57612edd612747565b5b6000612eec8882890161279a565b9550506020612efd8882890161279a565b945050604086013567ffffffffffffffff811115612f1e57612f1d61274c565b5b612f2a88828901612ddf565b935050606086013567ffffffffffffffff811115612f4b57612f4a61274c565b5b612f5788828901612ddf565b925050608086013567ffffffffffffffff811115612f7857612f7761274c565b5b612f8488828901612e94565b9150509295509295909350565b600067ffffffffffffffff821115612fac57612fab612920565b5b602082029050602081019050919050565b6000612fd0612fcb84612f91565b612980565b90508083825260208201905060208402830185811115612ff357612ff2612d71565b5b835b8181101561301c5780613008888261279a565b845260208401935050602081019050612ff5565b5050509392505050565b600082601f83011261303b5761303a612d40565b5b813561304b848260208601612fbd565b91505092915050565b6000806040838503121561306b5761306a612747565b5b600083013567ffffffffffffffff8111156130895761308861274c565b5b61309585828601613026565b925050602083013567ffffffffffffffff8111156130b6576130b561274c565b5b6130c285828601612ddf565b9150509250929050565b600281106130d957600080fd5b50565b6000813590506130eb816130cc565b92915050565b600060c082840312156131075761310661290a565b5b61311160c0612980565b90506000613121848285016127d0565b6000830152506020613135848285016127d0565b6020830152506040613149848285016127d0565b604083015250606061315d8482850161279a565b6060830152506080613171848285016130dc565b60808301525060a0613185848285016129ab565b60a08301525092915050565b600060c082840312156131a7576131a6612747565b5b60006131b5848285016130f1565b91505092915050565b6131c781612771565b82525050565b60006020820190506131e260008301846131be565b92915050565b6131f1816128d4565b81146131fc57600080fd5b50565b60008135905061320e816131e8565b92915050565b6000806040838503121561322b5761322a612747565b5b60006132398582860161279a565b925050602061324a858286016131ff565b9150509250929050565b61325d8161284f565b82525050565b60006020820190506132786000830184613254565b92915050565b6000806040838503121561329557613294612747565b5b60006132a38582860161279a565b92505060206132b48582860161279a565b9150509250929050565b600080600080600060a086880312156132da576132d9612747565b5b60006132e88882890161279a565b95505060206132f98882890161279a565b945050604061330a888289016127d0565b935050606061331b888289016127d0565b925050608086013567ffffffffffffffff81111561333c5761333b61274c565b5b61334888828901612e94565b9150509295509295909350565b60008060006060848603121561336e5761336d612747565b5b600061337c8682870161279a565b935050602061338d868287016127d0565b925050604061339e868287016127d0565b9150509250925092565b7f4e465420507269636520616e6420616d6f756e742063616e6e6f74206265206560008201527f7175616c20746f207a65726f0000000000000000000000000000000000000000602082015250565b6000613404602c83612ac5565b915061340f826133a8565b604082019050919050565b60006020820190508181036000830152613433816133f7565b9050919050565b600060608201905061344f60008301866131be565b61345c60208301856131be565b6134696040830184612825565b949350505050565b600081519050613480816131e8565b92915050565b60006020828403121561349c5761349b612747565b5b60006134aa84828501613471565b91505092915050565b60006080820190506134c86000830187612825565b6134d56020830186612825565b6134e260408301856131be565b6134ef60608301846131be565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353f57607f821691505b602082108103613552576135516134f8565b5b50919050565b600060408201905061356d60008301856131be565b61357a60208301846131be565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135bb826127af565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ed576135ec613581565b5b600182019050919050565b600060408201905061360d6000830185612825565b61361a6020830184612825565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e66742069732073686f77696e67207a65726f20666f7220746869732075736560008201527f722c20436865636b20616761696e000000000000000000000000000000000000602082015250565b60006136ac602e83612ac5565b91506136b782613650565b604082019050919050565b600060208201905081810360008301526136db8161369f565b9050919050565b7f52657761726420416d6f756e74206973207a65726f2c20436865636b2041676160008201527f696e000000000000000000000000000000000000000000000000000000000000602082015250565b600061373e602283612ac5565b9150613749826136e2565b604082019050919050565b6000602082019050818103600083015261376d81613731565b9050919050565b7f537461636b696e672074696d65206973206e6f7420636f6d706c65746520796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006137d0602183612ac5565b91506137db82613774565b604082019050919050565b600060208201905081810360008301526137ff816137c3565b9050919050565b7f5468697320756e737461636b696e6720697320616c726561647920636f6d706c60008201527f6574650000000000000000000000000000000000000000000000000000000000602082015250565b6000613862602383612ac5565b915061386d82613806565b604082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f416c6c207769746864726177206f7074696f6e2073656c65637465642c20736f60008201527f204e465420616d6f756e742073686f756c64206265207a65726f000000000000602082015250565b60006138f4603a83612ac5565b91506138ff82613898565b604082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b7f416c6c207769746864726177206f7074696f6e206e6f742073656c656374656460008201527f2c20736f204e465420616d6f756e742073686f756c64206e6f74206265207a6560208201527f726f000000000000000000000000000000000000000000000000000000000000604082015250565b60006139ac604283612ac5565b91506139b78261392a565b606082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b6000613a25613a20613a1b846139e2565b613a00565b6139ec565b9050919050565b613a3581613a0a565b82525050565b6000602082019050613a506000830184613a2c565b92915050565b6000613a61826127af565b9150613a6c836127af565b9250828201905080821115613a8457613a83613581565b5b92915050565b600060c082019050613a9f6000830189612825565b613aac6020830188612825565b613ab96040830187612825565b613ac660608301866131be565b613ad36080830185612825565b613ae060a0830184612bc3565b979650505050505050565b6000608082019050613b0060008301876131be565b613b0d6020830186612825565b613b1a6040830185612825565b613b276060830184612825565b95945050505050565b60006040820190508181036000830152613b4a8185612cc0565b90508181036020830152613b5e8184612cc0565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000613b8e82613b67565b613b988185613b72565b9350613ba8818560208601612ad6565b613bb18161290f565b840191505092915050565b600060a082019050613bd160008301886131be565b613bde60208301876131be565b613beb6040830186612825565b613bf86060830185612825565b8181036080830152613c0a8184613b83565b90509695505050505050565b600081519050613c258161287b565b92915050565b600060208284031215613c4157613c40612747565b5b6000613c4f84828501613c16565b91505092915050565b600060a082019050613c6d60008301886131be565b613c7a60208301876131be565b8181036040830152613c8c8186612cc0565b90508181036060830152613ca08185612cc0565b90508181036080830152613cb48184613b83565b90509695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ce5565b613d2c8683613ce5565b95508019841693508086168417925050509392505050565b6000613d5f613d5a613d55846127af565b613a00565b6127af565b9050919050565b6000819050919050565b613d7983613d44565b613d8d613d8582613d66565b848454613cf2565b825550505050565b600090565b613da2613d95565b613dad818484613d70565b505050565b5b81811015613dd157613dc6600082613d9a565b600181019050613db3565b5050565b601f821115613e1657613de781613cc0565b613df084613cd5565b81016020851015613dff578190505b613e13613e0b85613cd5565b830182613db2565b50505b505050565b600082821c905092915050565b6000613e3960001984600802613e1b565b1980831691505092915050565b6000613e528383613e28565b9150826002028217905092915050565b613e6b82612aba565b67ffffffffffffffff811115613e8457613e83612920565b5b613e8e8254613527565b613e99828285613dd5565b600060209050601f831160018114613ecc5760008415613eba578287015190505b613ec48582613e46565b865550613f2c565b601f198416613eda86613cc0565b60005b82811015613f0257848901518255600182019150602085019450602081019050613edd565b86831015613f1f5784890151613f1b601f891682613e28565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220cbaeb5d7a56e019d69eae607386efb93b9ce87adae3d7b93bd4a0319c4d0f40e64736f6c63430008140033