From 40fbe2e18fc2d5e2996c674559ce1e685dbfb108 Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Thu, 14 Mar 2024 16:05:02 -0500 Subject: [PATCH] Add work request/stake events and deployed to sepolia --- client/src/App.jsx | 77 ++++++++++++++++++++++++++++++------ client/src/assets/DAO.json | 30 +++++++++++++- client/src/assets/Work1.json | 36 ++++++++++++++++- ethereum/contracts/Work1.sol | 11 +++++- ethereum/test/Work1.js | 37 ++++++++++++++--- 5 files changed, 168 insertions(+), 23 deletions(-) diff --git a/client/src/App.jsx b/client/src/App.jsx index 2f4d3bf..bb39d90 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -10,12 +10,12 @@ import work1Artifact from './assets/Work1.json'; const contracts = { '0x539': { // Hardhat - DAO: '0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3', - Work1: '0x050C420Cc4995B41217Eba1B54B82Fd5687e9139', + DAO: '0x635F46Ea745a14431B27c5dd5838306Be289B747', + Work1: '0xEAefe601Aad7422307B99be65bbE005aeA966012', }, '0xaa36a7': { // Sepolia - DAO: '0x8F00038542C87A5eAf18d5938B7723bF2A04A4e4', - Work1: '0x42b79f8d8408c36aD4347ab72f826684440a7a8F', + DAO: '0x38AE4ABD47B10f6660CD70Cc8FF3401341E13d9e', + Work1: '0x358A07B26F4c556140872ecdB69c58e8807E7178', }, }; @@ -152,7 +152,6 @@ function App() { const promises = []; dispatchValidationPool({ type: 'refresh' }); for (let i = 0; i < count; i += 1) { - // promises.push(DAOContract.methods.validationPools(i).call()); promises.push(fetchValidationPool(i)); } await Promise.all(promises); @@ -163,8 +162,15 @@ function App() { Object.assign(s, { id: Number(stakeIndex), currentUserIsWorker: () => s.worker.toLowerCase() === account.toString().toLowerCase(), + timeRemaining: new Date(Number(s.endTime) * 1000) - new Date(), }); dispatchAvailabilityStake({ type: 'update', item: s }); + if (s.timeRemaining > 0) { + setTimeout(() => { + s.timeRemaining = 0; + dispatchAvailabilityStake({ type: 'update', item: s }); + }, s.timeRemaining); + } return s; }; @@ -231,6 +237,12 @@ function App() { fetchValidationPool(event.returnValues.poolIndex); }); + work1Contract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', (event) => { + console.log('event: availability staked', event); + fetchAvailabilityStake(event.returnValues.stakeIndex); + fetchReputation(); + }); + work1Contract.events.WorkAssigned({ fromBlock: 'latest' }).on('data', (event) => { console.log('event: work assigned', event); const r = fetchWorkRequest(event.returnValues.requestIndex); @@ -241,6 +253,11 @@ function App() { console.log('event: work evidence submitted', event); fetchWorkRequest(event.returnValues.requestIndex); }); + + work1Contract.events.WorkApprovalSubmitted({ fromBlock: 'latest' }).on('data', (event) => { + console.log('event: work approval submitted', event); + fetchWorkRequest(event.returnValues.requestIndex); + }); }, [provider, account, chainId, balance, setReputation, dispatchAvailabilityStake, dispatchValidationPool, dispatchWorkRequest]); @@ -313,8 +330,7 @@ function App() { }); }, [DAO, account]); - const stakeAvailability = useCallback(async () => { - const duration = 300; // 5 minutes + const stakeAvailability = useCallback(async (duration) => { const target = contracts[chainId].Work1; await DAO.methods.stakeAvailability(target, reputation, duration).send({ from: account, @@ -324,6 +340,20 @@ function App() { setReputation(0); }, [DAO, account, chainId, reputation, setReputation]); + const reclaimAvailabilityStake = useCallback(async (stakeIndex) => { + await work1.methods.reclaimAvailability(stakeIndex).send({ + from: account, + gas: 1000000, + }); + }, [work1, account]); + + const extendAvailabilityStake = useCallback(async (stakeIndex, duration) => { + await work1.methods.extendAvailability(stakeIndex, duration).send({ + from: account, + gas: 1000000, + }); + }, [work1, account]); + const requestWork = useCallback(async () => { const web3 = new Web3(provider); const priceWei = BigInt(web3.utils.toWei(work1Price, 'ether')); @@ -482,13 +512,19 @@ function App() {

Work Contract 1

- Price: - {work1Price} - {' '} - ETH + {`Price: ${work1Price} ETH`}
- + Stake Availability: + {' '} + {!reputation && <>No reputation available to stake} + {reputation > 0 && ( + <> + + {' '} + + + )}
Availability Stake Count: @@ -505,6 +541,7 @@ function App() { End Time Assigned Reclaimed + Actions @@ -516,6 +553,22 @@ function App() { {new Date(Number(s.endTime) * 1000).toLocaleString()} {s.assigned.toString()} {s.reclaimed.toString()} + + {s.currentUserIsWorker() && ( + + )} + {s.currentUserIsWorker() && s.timeRemaining <= 0 + && !s.assigned && !s.reclaimed && ( + <> + {' '} + + + )} + ))} diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index a863179..6a842a8 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -345,6 +345,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "maxDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "memberCount", @@ -377,6 +390,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "minDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "name", @@ -641,8 +667,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000324565b508060049081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b6123b5806200041b6000396000f3fe60806040526004361061012a5760003560e01c8063561b2463116100ab57806395d89b411161006f57806395d89b41146104445780639fcb294b1461046f578063a230c5241461049f578063a2336279146104dc578063a9059cbb14610522578063dd62ed3e1461055f5761012a565b8063561b2463146103395780635daf08ca14610362578063642b5bfb1461039f57806370a08231146103ca57806388380274146104075761012a565b806317c18217116100f257806317c182171461022c57806318160ddd1461026957806323b872dd14610294578063313ce567146102d15780633ff75442146102fc5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d657806317906c2e14610201575b600080fd5b34801561013b57600080fd5b5061014461059c565b6040516101519190611a48565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611b03565b61062e565b60405161018e9190611b5e565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190611b79565b610651565b6040516101cd93929190611bc4565b60405180910390f35b3480156101e257600080fd5b506101eb6106bb565b6040516101f89190611bfb565b60405180910390f35b34801561020d57600080fd5b506102166106c1565b6040516102239190611bfb565b60405180910390f35b34801561023857600080fd5b50610253600480360381019061024e9190611b79565b6106c7565b6040516102609190611b5e565b60405180910390f35b34801561027557600080fd5b5061027e610c1b565b60405161028b9190611bfb565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190611c16565b610c25565b6040516102c89190611b5e565b60405180910390f35b3480156102dd57600080fd5b506102e6610c54565b6040516102f39190611c85565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190611ca0565b610c5d565b6040516103309190611bfb565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190611cf9565b610d5b565b005b34801561036e57600080fd5b5061038960048036038101906103849190611b79565b610d84565b6040516103969190611d4c565b60405180910390f35b3480156103ab57600080fd5b506103b4610db7565b6040516103c19190611bfb565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190611ca0565b610dbd565b6040516103fe9190611bfb565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190611d67565b610e05565b60405161043b9190611b5e565b60405180910390f35b34801561045057600080fd5b50610459610e90565b6040516104669190611a48565b60405180910390f35b61048960048036038101906104849190611dba565b610f22565b6040516104969190611bfb565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190611ca0565b61115f565b6040516104d39190611b5e565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190611b79565b61117f565b6040516105199a99989796959493929190611dfa565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190611b03565b6111ed565b6040516105569190611b5e565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190611e96565b611210565b6040516105939190611bfb565b60405180910390f35b6060600380546105ab90611f05565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611f05565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b5050505050905090565b600080610639611297565b905061064681858561129f565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600801544211610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073790611fa8565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612014565b60405180910390fd5b600080600080600090505b85600301548110156108145785600201600082815260200190815260200160002091508160010160009054906101000a900460ff16156107f4578160020154846107ed9190612063565b9350610807565b8160020154836108049190612063565b92505b80806001019150506107a3565b508183101595508580156108965750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156109a4578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660056000600660008154809291906108d790612097565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610a0e9291906120df565b60405180910390a1600086610a235782610a25565b835b9050600087610a345784610a36565b835b9050600080600090505b8860030154811015610af95788600201600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610aec57600084866002015485610a929190612108565b610a9c9190612179565b9050610adc308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610ad79190612063565b6112b1565b8083610ae89190612063565b9250505b8080600101915050610a40565b5060008183610b0891906121aa565b90506000811115610b4357610b42308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836112b1565b5b60005b600654811015610c0c5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610b92610c1b565b610b9b83610dbd565b8d60040154610baa9190612108565b610bb49190612179565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bfc573d6000803e3d6000fd5b5050508080600101915050610b46565b50505050505050505050919050565b6000600254905090565b600080610c30611297565b9050610c3d8582856113a5565b610c488585856112b1565b60019150509392505050565b60006012905090565b6000600b6000815480929190610c7290612097565b9190505590506000600a60008381526020019081526020016000209050828160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051610d4d9190611bfb565b60405180910390a150919050565b6000600860008581526020019081526020016000209050610d7e81338585611439565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610e1184846111ed565b90508015610e89578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610e56939291906121de565b600060405180830381600087803b158015610e7057600080fd5b505af1158015610e84573d6000803e3d6000fd5b505050505b9392505050565b606060048054610e9f90611f05565b80601f0160208091040260200160405190810160405280929190818152602001828054610ecb90611f05565b8015610f185780601f10610eed57610100808354040283529160200191610f18565b820191906000526020600020905b815481529060010190602001808311610efb57829003601f168201915b5050505050905090565b6000803411610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612287565b60405180910390fd5b6000600a60008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611007906122f3565b60405180910390fd5b6009600081548092919061102390612097565b919050559150600060086000848152602001908152602001600020905084816001018190555034816004018190555083816007018190555083426110679190612063565b81600801819055508281600001819055506110a68260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461153a565b6110e3818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346110dc9190612179565b6001611439565b611120818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346111199190612179565b6000611439565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161114f9190611bfb565b60405180910390a1505092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060030154908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff1690508a565b6000806111f8611297565b90506112058185856112b1565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6112ac83838360016115bc565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113235760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161131a9190611d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113955760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161138c9190611d4c565b60405180910390fd5b6113a0838383611793565b505050565b60006113b18484611210565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114335781811015611423578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161141a939291906121de565b60405180910390fd5b611432848484840360006115bc565b5b50505050565b8360080154421115611480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114779061235f565b60405180910390fd5b61148b8330846112b1565b60008460030160008154809291906114a290612097565b91905055905060008560020160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ac5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115a39190611d4c565b60405180910390fd5b6115b860008383611793565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116259190611d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116a05760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116979190611d4c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561178d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516117849190611bfb565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e55780600260008282546117d99190612063565b925050819055506118b8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611871578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611868939291906121de565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611901578060026000828254039250508190555061194e565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119ab9190611bfb565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f25780820151818401526020810190506119d7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1a826119b8565b611a2481856119c3565b9350611a348185602086016119d4565b611a3d816119fe565b840191505092915050565b60006020820190508181036000830152611a628184611a0f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a9a82611a6f565b9050919050565b611aaa81611a8f565b8114611ab557600080fd5b50565b600081359050611ac781611aa1565b92915050565b6000819050919050565b611ae081611acd565b8114611aeb57600080fd5b50565b600081359050611afd81611ad7565b92915050565b60008060408385031215611b1a57611b19611a6a565b5b6000611b2885828601611ab8565b9250506020611b3985828601611aee565b9150509250929050565b60008115159050919050565b611b5881611b43565b82525050565b6000602082019050611b736000830184611b4f565b92915050565b600060208284031215611b8f57611b8e611a6a565b5b6000611b9d84828501611aee565b91505092915050565b611baf81611acd565b82525050565b611bbe81611a8f565b82525050565b6000606082019050611bd96000830186611ba6565b611be66020830185611bb5565b611bf36040830184611bb5565b949350505050565b6000602082019050611c106000830184611ba6565b92915050565b600080600060608486031215611c2f57611c2e611a6a565b5b6000611c3d86828701611ab8565b9350506020611c4e86828701611ab8565b9250506040611c5f86828701611aee565b9150509250925092565b600060ff82169050919050565b611c7f81611c69565b82525050565b6000602082019050611c9a6000830184611c76565b92915050565b600060208284031215611cb657611cb5611a6a565b5b6000611cc484828501611ab8565b91505092915050565b611cd681611b43565b8114611ce157600080fd5b50565b600081359050611cf381611ccd565b92915050565b600080600060608486031215611d1257611d11611a6a565b5b6000611d2086828701611aee565b9350506020611d3186828701611aee565b9250506040611d4286828701611ce4565b9150509250925092565b6000602082019050611d616000830184611bb5565b92915050565b600080600060608486031215611d8057611d7f611a6a565b5b6000611d8e86828701611ab8565b9350506020611d9f86828701611aee565b9250506040611db086828701611aee565b9150509250925092565b60008060408385031215611dd157611dd0611a6a565b5b6000611ddf85828601611aee565b9250506020611df085828601611aee565b9150509250929050565b600061014082019050611e10600083018d611ba6565b611e1d602083018c611ba6565b611e2a604083018b611ba6565b611e37606083018a611ba6565b611e446080830189611ba6565b611e5160a0830188611ba6565b611e5e60c0830187611ba6565b611e6b60e0830186611ba6565b611e79610100830185611b4f565b611e87610120830184611b4f565b9b9a5050505050505050505050565b60008060408385031215611ead57611eac611a6a565b5b6000611ebb85828601611ab8565b9250506020611ecc85828601611ab8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1d57607f821691505b602082108103611f3057611f2f611ed6565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f926021836119c3565b9150611f9d82611f36565b604082019050919050565b60006020820190508181036000830152611fc181611f85565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000611ffe6018836119c3565b915061200982611fc8565b602082019050919050565b6000602082019050818103600083015261202d81611ff1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061206e82611acd565b915061207983611acd565b925082820190508082111561209157612090612034565b5b92915050565b60006120a282611acd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120d4576120d3612034565b5b600182019050919050565b60006040820190506120f46000830185611ba6565b6121016020830184611b4f565b9392505050565b600061211382611acd565b915061211e83611acd565b925082820261212c81611acd565b9150828204841483151761214357612142612034565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061218482611acd565b915061218f83611acd565b92508261219f5761219e61214a565b5b828204905092915050565b60006121b582611acd565b91506121c083611acd565b92508282039050818111156121d8576121d7612034565b5b92915050565b60006060820190506121f36000830186611bb5565b6122006020830185611ba6565b61220d6040830184611ba6565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612271602b836119c3565b915061227c82612215565b604082019050919050565b600060208201905081810360008301526122a081612264565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006122dd6015836119c3565b91506122e8826122a7565b602082019050919050565b6000602082019050818103600083015261230c816122d0565b9050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006123496018836119c3565b915061235482612313565b602082019050919050565b600060208201905081810360008301526123788161233c565b905091905056fea26469706673582212201b7e7724a56b153974bc7c0e3d5c3baba28823e71fb4a6c5b27cd818a08cd49464736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c8063561b2463116100ab57806395d89b411161006f57806395d89b41146104445780639fcb294b1461046f578063a230c5241461049f578063a2336279146104dc578063a9059cbb14610522578063dd62ed3e1461055f5761012a565b8063561b2463146103395780635daf08ca14610362578063642b5bfb1461039f57806370a08231146103ca57806388380274146104075761012a565b806317c18217116100f257806317c182171461022c57806318160ddd1461026957806323b872dd14610294578063313ce567146102d15780633ff75442146102fc5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d657806317906c2e14610201575b600080fd5b34801561013b57600080fd5b5061014461059c565b6040516101519190611a48565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611b03565b61062e565b60405161018e9190611b5e565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190611b79565b610651565b6040516101cd93929190611bc4565b60405180910390f35b3480156101e257600080fd5b506101eb6106bb565b6040516101f89190611bfb565b60405180910390f35b34801561020d57600080fd5b506102166106c1565b6040516102239190611bfb565b60405180910390f35b34801561023857600080fd5b50610253600480360381019061024e9190611b79565b6106c7565b6040516102609190611b5e565b60405180910390f35b34801561027557600080fd5b5061027e610c1b565b60405161028b9190611bfb565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190611c16565b610c25565b6040516102c89190611b5e565b60405180910390f35b3480156102dd57600080fd5b506102e6610c54565b6040516102f39190611c85565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190611ca0565b610c5d565b6040516103309190611bfb565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190611cf9565b610d5b565b005b34801561036e57600080fd5b5061038960048036038101906103849190611b79565b610d84565b6040516103969190611d4c565b60405180910390f35b3480156103ab57600080fd5b506103b4610db7565b6040516103c19190611bfb565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190611ca0565b610dbd565b6040516103fe9190611bfb565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190611d67565b610e05565b60405161043b9190611b5e565b60405180910390f35b34801561045057600080fd5b50610459610e90565b6040516104669190611a48565b60405180910390f35b61048960048036038101906104849190611dba565b610f22565b6040516104969190611bfb565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190611ca0565b61115f565b6040516104d39190611b5e565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190611b79565b61117f565b6040516105199a99989796959493929190611dfa565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190611b03565b6111ed565b6040516105569190611b5e565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190611e96565b611210565b6040516105939190611bfb565b60405180910390f35b6060600380546105ab90611f05565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611f05565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b5050505050905090565b600080610639611297565b905061064681858561129f565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600801544211610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073790611fa8565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612014565b60405180910390fd5b600080600080600090505b85600301548110156108145785600201600082815260200190815260200160002091508160010160009054906101000a900460ff16156107f4578160020154846107ed9190612063565b9350610807565b8160020154836108049190612063565b92505b80806001019150506107a3565b508183101595508580156108965750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156109a4578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660056000600660008154809291906108d790612097565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610a0e9291906120df565b60405180910390a1600086610a235782610a25565b835b9050600087610a345784610a36565b835b9050600080600090505b8860030154811015610af95788600201600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610aec57600084866002015485610a929190612108565b610a9c9190612179565b9050610adc308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610ad79190612063565b6112b1565b8083610ae89190612063565b9250505b8080600101915050610a40565b5060008183610b0891906121aa565b90506000811115610b4357610b42308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836112b1565b5b60005b600654811015610c0c5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610b92610c1b565b610b9b83610dbd565b8d60040154610baa9190612108565b610bb49190612179565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bfc573d6000803e3d6000fd5b5050508080600101915050610b46565b50505050505050505050919050565b6000600254905090565b600080610c30611297565b9050610c3d8582856113a5565b610c488585856112b1565b60019150509392505050565b60006012905090565b6000600b6000815480929190610c7290612097565b9190505590506000600a60008381526020019081526020016000209050828160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051610d4d9190611bfb565b60405180910390a150919050565b6000600860008581526020019081526020016000209050610d7e81338585611439565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610e1184846111ed565b90508015610e89578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610e56939291906121de565b600060405180830381600087803b158015610e7057600080fd5b505af1158015610e84573d6000803e3d6000fd5b505050505b9392505050565b606060048054610e9f90611f05565b80601f0160208091040260200160405190810160405280929190818152602001828054610ecb90611f05565b8015610f185780601f10610eed57610100808354040283529160200191610f18565b820191906000526020600020905b815481529060010190602001808311610efb57829003601f168201915b5050505050905090565b6000803411610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612287565b60405180910390fd5b6000600a60008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611007906122f3565b60405180910390fd5b6009600081548092919061102390612097565b919050559150600060086000848152602001908152602001600020905084816001018190555034816004018190555083816007018190555083426110679190612063565b81600801819055508281600001819055506110a68260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461153a565b6110e3818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346110dc9190612179565b6001611439565b611120818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346111199190612179565b6000611439565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161114f9190611bfb565b60405180910390a1505092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060030154908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff1690508a565b6000806111f8611297565b90506112058185856112b1565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6112ac83838360016115bc565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113235760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161131a9190611d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113955760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161138c9190611d4c565b60405180910390fd5b6113a0838383611793565b505050565b60006113b18484611210565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114335781811015611423578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161141a939291906121de565b60405180910390fd5b611432848484840360006115bc565b5b50505050565b8360080154421115611480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114779061235f565b60405180910390fd5b61148b8330846112b1565b60008460030160008154809291906114a290612097565b91905055905060008560020160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ac5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115a39190611d4c565b60405180910390fd5b6115b860008383611793565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116259190611d4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116a05760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116979190611d4c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561178d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516117849190611bfb565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e55780600260008282546117d99190612063565b925050819055506118b8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611871578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611868939291906121de565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611901578060026000828254039250508190555061194e565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119ab9190611bfb565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f25780820151818401526020810190506119d7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1a826119b8565b611a2481856119c3565b9350611a348185602086016119d4565b611a3d816119fe565b840191505092915050565b60006020820190508181036000830152611a628184611a0f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a9a82611a6f565b9050919050565b611aaa81611a8f565b8114611ab557600080fd5b50565b600081359050611ac781611aa1565b92915050565b6000819050919050565b611ae081611acd565b8114611aeb57600080fd5b50565b600081359050611afd81611ad7565b92915050565b60008060408385031215611b1a57611b19611a6a565b5b6000611b2885828601611ab8565b9250506020611b3985828601611aee565b9150509250929050565b60008115159050919050565b611b5881611b43565b82525050565b6000602082019050611b736000830184611b4f565b92915050565b600060208284031215611b8f57611b8e611a6a565b5b6000611b9d84828501611aee565b91505092915050565b611baf81611acd565b82525050565b611bbe81611a8f565b82525050565b6000606082019050611bd96000830186611ba6565b611be66020830185611bb5565b611bf36040830184611bb5565b949350505050565b6000602082019050611c106000830184611ba6565b92915050565b600080600060608486031215611c2f57611c2e611a6a565b5b6000611c3d86828701611ab8565b9350506020611c4e86828701611ab8565b9250506040611c5f86828701611aee565b9150509250925092565b600060ff82169050919050565b611c7f81611c69565b82525050565b6000602082019050611c9a6000830184611c76565b92915050565b600060208284031215611cb657611cb5611a6a565b5b6000611cc484828501611ab8565b91505092915050565b611cd681611b43565b8114611ce157600080fd5b50565b600081359050611cf381611ccd565b92915050565b600080600060608486031215611d1257611d11611a6a565b5b6000611d2086828701611aee565b9350506020611d3186828701611aee565b9250506040611d4286828701611ce4565b9150509250925092565b6000602082019050611d616000830184611bb5565b92915050565b600080600060608486031215611d8057611d7f611a6a565b5b6000611d8e86828701611ab8565b9350506020611d9f86828701611aee565b9250506040611db086828701611aee565b9150509250925092565b60008060408385031215611dd157611dd0611a6a565b5b6000611ddf85828601611aee565b9250506020611df085828601611aee565b9150509250929050565b600061014082019050611e10600083018d611ba6565b611e1d602083018c611ba6565b611e2a604083018b611ba6565b611e37606083018a611ba6565b611e446080830189611ba6565b611e5160a0830188611ba6565b611e5e60c0830187611ba6565b611e6b60e0830186611ba6565b611e79610100830185611b4f565b611e87610120830184611b4f565b9b9a5050505050505050505050565b60008060408385031215611ead57611eac611a6a565b5b6000611ebb85828601611ab8565b9250506020611ecc85828601611ab8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1d57607f821691505b602082108103611f3057611f2f611ed6565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f926021836119c3565b9150611f9d82611f36565b604082019050919050565b60006020820190508181036000830152611fc181611f85565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000611ffe6018836119c3565b915061200982611fc8565b602082019050919050565b6000602082019050818103600083015261202d81611ff1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061206e82611acd565b915061207983611acd565b925082820190508082111561209157612090612034565b5b92915050565b60006120a282611acd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120d4576120d3612034565b5b600182019050919050565b60006040820190506120f46000830185611ba6565b6121016020830184611b4f565b9392505050565b600061211382611acd565b915061211e83611acd565b925082820261212c81611acd565b9150828204841483151761214357612142612034565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061218482611acd565b915061218f83611acd565b92508261219f5761219e61214a565b5b828204905092915050565b60006121b582611acd565b91506121c083611acd565b92508282039050818111156121d8576121d7612034565b5b92915050565b60006060820190506121f36000830186611bb5565b6122006020830185611ba6565b61220d6040830184611ba6565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612271602b836119c3565b915061227c82612215565b604082019050919050565b600060208201905081810360008301526122a081612264565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006122dd6015836119c3565b91506122e8826122a7565b602082019050919050565b6000602082019050818103600083015261230c816122d0565b9050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006123496018836119c3565b915061235482612313565b602082019050919050565b600060208201905081810360008301526123788161233c565b905091905056fea26469706673582212201b7e7724a56b153974bc7c0e3d5c3baba28823e71fb4a6c5b27cd818a08cd49464736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000324565b508060049081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b61258f806200041b6000396000f3fe6080604052600436106101405760003560e01c806356715761116100b657806395d89b411161006f57806395d89b41146104b05780639fcb294b146104db578063a230c5241461050b578063a233627914610548578063a9059cbb1461058e578063dd62ed3e146105cb57610140565b806356715761146103785780635daf08ca146103a3578063642b5bfb146103e05780636db5c8fd1461040b57806370a0823114610436578063883802741461047357610140565b806317c182171161010857806317c182171461024257806318160ddd1461027f57806323b872dd146102aa578063313ce567146102e75780633ff7544214610312578063561b24631461034f57610140565b806306fdde0314610145578063095ea7b3146101705780630b1e7f83146101ad57806311aee380146101ec57806317906c2e14610217575b600080fd5b34801561015157600080fd5b5061015a610608565b6040516101679190611b4a565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611c05565b61069a565b6040516101a49190611c60565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190611c7b565b6106bd565b6040516101e393929190611cc6565b60405180910390f35b3480156101f857600080fd5b50610201610727565b60405161020e9190611cfd565b60405180910390f35b34801561022357600080fd5b5061022c61072d565b6040516102399190611cfd565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611c7b565b610733565b6040516102769190611c60565b60405180910390f35b34801561028b57600080fd5b50610294610c87565b6040516102a19190611cfd565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611d18565b610c91565b6040516102de9190611c60565b60405180910390f35b3480156102f357600080fd5b506102fc610cc0565b6040516103099190611d87565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190611da2565b610cc9565b6040516103469190611cfd565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190611dfb565b610dc7565b005b34801561038457600080fd5b5061038d610df0565b60405161039a9190611cfd565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c59190611c7b565b610df5565b6040516103d79190611e4e565b60405180910390f35b3480156103ec57600080fd5b506103f5610e28565b6040516104029190611cfd565b60405180910390f35b34801561041757600080fd5b50610420610e2e565b60405161042d9190611cfd565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190611da2565b610e35565b60405161046a9190611cfd565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190611e69565b610e7d565b6040516104a79190611c60565b60405180910390f35b3480156104bc57600080fd5b506104c5610f08565b6040516104d29190611b4a565b60405180910390f35b6104f560048036038101906104f09190611ebc565b610f9a565b6040516105029190611cfd565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190611da2565b611261565b60405161053f9190611c60565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190611c7b565b611281565b6040516105859a99989796959493929190611efc565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190611c05565b6112ef565b6040516105c29190611c60565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190611f98565b611312565b6040516105ff9190611cfd565b60405180910390f35b60606003805461061790612007565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612007565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b5050505050905090565b6000806106a5611399565b90506106b28185856113a1565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a6000836001015481526020019081526020016000209050816008015442116107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a3906120aa565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612116565b60405180910390fd5b600080600080600090505b85600301548110156108805785600201600082815260200190815260200160002091508160010160009054906101000a900460ff1615610860578160020154846108599190612165565b9350610873565b8160020154836108709190612165565b92505b808060010191505061080f565b508183101595508580156109025750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610a10578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006006600081548092919061094390612199565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610a7a9291906121e1565b60405180910390a1600086610a8f5782610a91565b835b9050600087610aa05784610aa2565b835b9050600080600090505b8860030154811015610b655788600201600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610b5857600084866002015485610afe919061220a565b610b08919061227b565b9050610b48308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610b439190612165565b6113b3565b8083610b549190612165565b9250505b8080600101915050610aac565b5060008183610b7491906122ac565b90506000811115610baf57610bae308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b3565b5b60005b600654811015610c785760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610bfe610c87565b610c0783610e35565b8d60040154610c16919061220a565b610c20919061227b565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c68573d6000803e3d6000fd5b5050508080600101915050610bb2565b50505050505050505050919050565b6000600254905090565b600080610c9c611399565b9050610ca98582856114a7565b610cb48585856113b3565b60019150509392505050565b60006012905090565b6000600b6000815480929190610cde90612199565b9190505590506000600a60008381526020019081526020016000209050828160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051610db99190611cfd565b60405180910390a150919050565b6000600860008581526020019081526020016000209050610dea8133858561153b565b50505050565b603c81565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6201518081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610e8984846112ef565b90508015610f01578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610ece939291906122e0565b600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b505050505b9392505050565b606060048054610f1790612007565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4390612007565b8015610f905780601f10610f6557610100808354040283529160200191610f90565b820191906000526020600020905b815481529060010190602001808311610f7357829003601f168201915b5050505050905090565b6000803411610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590612389565b60405180910390fd5b603c821015611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906123f5565b60405180910390fd5b62015180821115611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612461565b60405180910390fd5b6000600a60008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906124cd565b60405180910390fd5b6009600081548092919061112590612199565b919050559150600060086000848152602001908152602001600020905084816001018190555034816004018190555083816007018190555083426111699190612165565b81600801819055508281600001819055506111a88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461163c565b6111e5818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346111de919061227b565b600161153b565b611222818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461121b919061227b565b600061153b565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516112519190611cfd565b60405180910390a1505092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060030154908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff1690508a565b6000806112fa611399565b90506113078185856113b3565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6113ae83838360016116be565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114255760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161141c9190611e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114975760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161148e9190611e4e565b60405180910390fd5b6114a2838383611895565b505050565b60006114b38484611312565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115355781811015611525578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161151c939291906122e0565b60405180910390fd5b611534848484840360006116be565b5b50505050565b8360080154421115611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990612539565b60405180910390fd5b61158d8330846113b3565b60008460030160008154809291906115a490612199565b91905055905060008560020160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ae5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016116a59190611e4e565b60405180910390fd5b6116ba60008383611895565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117305760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016117279190611e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a25760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016117999190611e4e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561188f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516118869190611cfd565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118e75780600260008282546118db9190612165565b925050819055506119ba565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611973578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161196a939291906122e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a035780600260008282540392505081905550611a50565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aad9190611cfd565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611af4578082015181840152602081019050611ad9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b1c82611aba565b611b268185611ac5565b9350611b36818560208601611ad6565b611b3f81611b00565b840191505092915050565b60006020820190508181036000830152611b648184611b11565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b9c82611b71565b9050919050565b611bac81611b91565b8114611bb757600080fd5b50565b600081359050611bc981611ba3565b92915050565b6000819050919050565b611be281611bcf565b8114611bed57600080fd5b50565b600081359050611bff81611bd9565b92915050565b60008060408385031215611c1c57611c1b611b6c565b5b6000611c2a85828601611bba565b9250506020611c3b85828601611bf0565b9150509250929050565b60008115159050919050565b611c5a81611c45565b82525050565b6000602082019050611c756000830184611c51565b92915050565b600060208284031215611c9157611c90611b6c565b5b6000611c9f84828501611bf0565b91505092915050565b611cb181611bcf565b82525050565b611cc081611b91565b82525050565b6000606082019050611cdb6000830186611ca8565b611ce86020830185611cb7565b611cf56040830184611cb7565b949350505050565b6000602082019050611d126000830184611ca8565b92915050565b600080600060608486031215611d3157611d30611b6c565b5b6000611d3f86828701611bba565b9350506020611d5086828701611bba565b9250506040611d6186828701611bf0565b9150509250925092565b600060ff82169050919050565b611d8181611d6b565b82525050565b6000602082019050611d9c6000830184611d78565b92915050565b600060208284031215611db857611db7611b6c565b5b6000611dc684828501611bba565b91505092915050565b611dd881611c45565b8114611de357600080fd5b50565b600081359050611df581611dcf565b92915050565b600080600060608486031215611e1457611e13611b6c565b5b6000611e2286828701611bf0565b9350506020611e3386828701611bf0565b9250506040611e4486828701611de6565b9150509250925092565b6000602082019050611e636000830184611cb7565b92915050565b600080600060608486031215611e8257611e81611b6c565b5b6000611e9086828701611bba565b9350506020611ea186828701611bf0565b9250506040611eb286828701611bf0565b9150509250925092565b60008060408385031215611ed357611ed2611b6c565b5b6000611ee185828601611bf0565b9250506020611ef285828601611bf0565b9150509250929050565b600061014082019050611f12600083018d611ca8565b611f1f602083018c611ca8565b611f2c604083018b611ca8565b611f39606083018a611ca8565b611f466080830189611ca8565b611f5360a0830188611ca8565b611f6060c0830187611ca8565b611f6d60e0830186611ca8565b611f7b610100830185611c51565b611f89610120830184611c51565b9b9a5050505050505050505050565b60008060408385031215611faf57611fae611b6c565b5b6000611fbd85828601611bba565b9250506020611fce85828601611bba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061201f57607f821691505b60208210810361203257612031611fd8565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612094602183611ac5565b915061209f82612038565b604082019050919050565b600060208201905081810360008301526120c381612087565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612100601883611ac5565b915061210b826120ca565b602082019050919050565b6000602082019050818103600083015261212f816120f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217082611bcf565b915061217b83611bcf565b925082820190508082111561219357612192612136565b5b92915050565b60006121a482611bcf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121d6576121d5612136565b5b600182019050919050565b60006040820190506121f66000830185611ca8565b6122036020830184611c51565b9392505050565b600061221582611bcf565b915061222083611bcf565b925082820261222e81611bcf565b9150828204841483151761224557612244612136565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061228682611bcf565b915061229183611bcf565b9250826122a1576122a061224c565b5b828204905092915050565b60006122b782611bcf565b91506122c283611bcf565b92508282039050818111156122da576122d9612136565b5b92915050565b60006060820190506122f56000830186611cb7565b6123026020830185611ca8565b61230f6040830184611ca8565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612373602b83611ac5565b915061237e82612317565b604082019050919050565b600060208201905081810360008301526123a281612366565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b60006123df601583611ac5565b91506123ea826123a9565b602082019050919050565b6000602082019050818103600083015261240e816123d2565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b600061244b601483611ac5565b915061245682612415565b602082019050919050565b6000602082019050818103600083015261247a8161243e565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006124b7601583611ac5565b91506124c282612481565b602082019050919050565b600060208201905081810360008301526124e6816124aa565b9050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000612523601883611ac5565b915061252e826124ed565b602082019050919050565b6000602082019050818103600083015261255281612516565b905091905056fea2646970667358221220b4d09b9a28fb011edcf0480719177ced0e36d7e743e93b59f9d8d6118e05c6cf64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806356715761116100b657806395d89b411161006f57806395d89b41146104b05780639fcb294b146104db578063a230c5241461050b578063a233627914610548578063a9059cbb1461058e578063dd62ed3e146105cb57610140565b806356715761146103785780635daf08ca146103a3578063642b5bfb146103e05780636db5c8fd1461040b57806370a0823114610436578063883802741461047357610140565b806317c182171161010857806317c182171461024257806318160ddd1461027f57806323b872dd146102aa578063313ce567146102e75780633ff7544214610312578063561b24631461034f57610140565b806306fdde0314610145578063095ea7b3146101705780630b1e7f83146101ad57806311aee380146101ec57806317906c2e14610217575b600080fd5b34801561015157600080fd5b5061015a610608565b6040516101679190611b4a565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611c05565b61069a565b6040516101a49190611c60565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190611c7b565b6106bd565b6040516101e393929190611cc6565b60405180910390f35b3480156101f857600080fd5b50610201610727565b60405161020e9190611cfd565b60405180910390f35b34801561022357600080fd5b5061022c61072d565b6040516102399190611cfd565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611c7b565b610733565b6040516102769190611c60565b60405180910390f35b34801561028b57600080fd5b50610294610c87565b6040516102a19190611cfd565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611d18565b610c91565b6040516102de9190611c60565b60405180910390f35b3480156102f357600080fd5b506102fc610cc0565b6040516103099190611d87565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190611da2565b610cc9565b6040516103469190611cfd565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190611dfb565b610dc7565b005b34801561038457600080fd5b5061038d610df0565b60405161039a9190611cfd565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c59190611c7b565b610df5565b6040516103d79190611e4e565b60405180910390f35b3480156103ec57600080fd5b506103f5610e28565b6040516104029190611cfd565b60405180910390f35b34801561041757600080fd5b50610420610e2e565b60405161042d9190611cfd565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190611da2565b610e35565b60405161046a9190611cfd565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190611e69565b610e7d565b6040516104a79190611c60565b60405180910390f35b3480156104bc57600080fd5b506104c5610f08565b6040516104d29190611b4a565b60405180910390f35b6104f560048036038101906104f09190611ebc565b610f9a565b6040516105029190611cfd565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190611da2565b611261565b60405161053f9190611c60565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190611c7b565b611281565b6040516105859a99989796959493929190611efc565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190611c05565b6112ef565b6040516105c29190611c60565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190611f98565b611312565b6040516105ff9190611cfd565b60405180910390f35b60606003805461061790612007565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612007565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b5050505050905090565b6000806106a5611399565b90506106b28185856113a1565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a6000836001015481526020019081526020016000209050816008015442116107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a3906120aa565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612116565b60405180910390fd5b600080600080600090505b85600301548110156108805785600201600082815260200190815260200160002091508160010160009054906101000a900460ff1615610860578160020154846108599190612165565b9350610873565b8160020154836108709190612165565b92505b808060010191505061080f565b508183101595508580156109025750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610a10578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006006600081548092919061094390612199565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610a7a9291906121e1565b60405180910390a1600086610a8f5782610a91565b835b9050600087610aa05784610aa2565b835b9050600080600090505b8860030154811015610b655788600201600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610b5857600084866002015485610afe919061220a565b610b08919061227b565b9050610b48308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610b439190612165565b6113b3565b8083610b549190612165565b9250505b8080600101915050610aac565b5060008183610b7491906122ac565b90506000811115610baf57610bae308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b3565b5b60005b600654811015610c785760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610bfe610c87565b610c0783610e35565b8d60040154610c16919061220a565b610c20919061227b565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c68573d6000803e3d6000fd5b5050508080600101915050610bb2565b50505050505050505050919050565b6000600254905090565b600080610c9c611399565b9050610ca98582856114a7565b610cb48585856113b3565b60019150509392505050565b60006012905090565b6000600b6000815480929190610cde90612199565b9190505590506000600a60008381526020019081526020016000209050828160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051610db99190611cfd565b60405180910390a150919050565b6000600860008581526020019081526020016000209050610dea8133858561153b565b50505050565b603c81565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6201518081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610e8984846112ef565b90508015610f01578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610ece939291906122e0565b600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b505050505b9392505050565b606060048054610f1790612007565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4390612007565b8015610f905780601f10610f6557610100808354040283529160200191610f90565b820191906000526020600020905b815481529060010190602001808311610f7357829003601f168201915b5050505050905090565b6000803411610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590612389565b60405180910390fd5b603c821015611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906123f5565b60405180910390fd5b62015180821115611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612461565b60405180910390fd5b6000600a60008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906124cd565b60405180910390fd5b6009600081548092919061112590612199565b919050559150600060086000848152602001908152602001600020905084816001018190555034816004018190555083816007018190555083426111699190612165565b81600801819055508281600001819055506111a88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461163c565b6111e5818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346111de919061227b565b600161153b565b611222818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461121b919061227b565b600061153b565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516112519190611cfd565b60405180910390a1505092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060030154908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff1690508a565b6000806112fa611399565b90506113078185856113b3565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6113ae83838360016116be565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114255760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161141c9190611e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114975760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161148e9190611e4e565b60405180910390fd5b6114a2838383611895565b505050565b60006114b38484611312565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115355781811015611525578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161151c939291906122e0565b60405180910390fd5b611534848484840360006116be565b5b50505050565b8360080154421115611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990612539565b60405180910390fd5b61158d8330846113b3565b60008460030160008154809291906115a490612199565b91905055905060008560020160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ae5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016116a59190611e4e565b60405180910390fd5b6116ba60008383611895565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117305760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016117279190611e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a25760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016117999190611e4e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561188f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516118869190611cfd565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118e75780600260008282546118db9190612165565b925050819055506119ba565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611973578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161196a939291906122e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a035780600260008282540392505081905550611a50565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611aad9190611cfd565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611af4578082015181840152602081019050611ad9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b1c82611aba565b611b268185611ac5565b9350611b36818560208601611ad6565b611b3f81611b00565b840191505092915050565b60006020820190508181036000830152611b648184611b11565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b9c82611b71565b9050919050565b611bac81611b91565b8114611bb757600080fd5b50565b600081359050611bc981611ba3565b92915050565b6000819050919050565b611be281611bcf565b8114611bed57600080fd5b50565b600081359050611bff81611bd9565b92915050565b60008060408385031215611c1c57611c1b611b6c565b5b6000611c2a85828601611bba565b9250506020611c3b85828601611bf0565b9150509250929050565b60008115159050919050565b611c5a81611c45565b82525050565b6000602082019050611c756000830184611c51565b92915050565b600060208284031215611c9157611c90611b6c565b5b6000611c9f84828501611bf0565b91505092915050565b611cb181611bcf565b82525050565b611cc081611b91565b82525050565b6000606082019050611cdb6000830186611ca8565b611ce86020830185611cb7565b611cf56040830184611cb7565b949350505050565b6000602082019050611d126000830184611ca8565b92915050565b600080600060608486031215611d3157611d30611b6c565b5b6000611d3f86828701611bba565b9350506020611d5086828701611bba565b9250506040611d6186828701611bf0565b9150509250925092565b600060ff82169050919050565b611d8181611d6b565b82525050565b6000602082019050611d9c6000830184611d78565b92915050565b600060208284031215611db857611db7611b6c565b5b6000611dc684828501611bba565b91505092915050565b611dd881611c45565b8114611de357600080fd5b50565b600081359050611df581611dcf565b92915050565b600080600060608486031215611e1457611e13611b6c565b5b6000611e2286828701611bf0565b9350506020611e3386828701611bf0565b9250506040611e4486828701611de6565b9150509250925092565b6000602082019050611e636000830184611cb7565b92915050565b600080600060608486031215611e8257611e81611b6c565b5b6000611e9086828701611bba565b9350506020611ea186828701611bf0565b9250506040611eb286828701611bf0565b9150509250925092565b60008060408385031215611ed357611ed2611b6c565b5b6000611ee185828601611bf0565b9250506020611ef285828601611bf0565b9150509250929050565b600061014082019050611f12600083018d611ca8565b611f1f602083018c611ca8565b611f2c604083018b611ca8565b611f39606083018a611ca8565b611f466080830189611ca8565b611f5360a0830188611ca8565b611f6060c0830187611ca8565b611f6d60e0830186611ca8565b611f7b610100830185611c51565b611f89610120830184611c51565b9b9a5050505050505050505050565b60008060408385031215611faf57611fae611b6c565b5b6000611fbd85828601611bba565b9250506020611fce85828601611bba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061201f57607f821691505b60208210810361203257612031611fd8565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612094602183611ac5565b915061209f82612038565b604082019050919050565b600060208201905081810360008301526120c381612087565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612100601883611ac5565b915061210b826120ca565b602082019050919050565b6000602082019050818103600083015261212f816120f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217082611bcf565b915061217b83611bcf565b925082820190508082111561219357612192612136565b5b92915050565b60006121a482611bcf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121d6576121d5612136565b5b600182019050919050565b60006040820190506121f66000830185611ca8565b6122036020830184611c51565b9392505050565b600061221582611bcf565b915061222083611bcf565b925082820261222e81611bcf565b9150828204841483151761224557612244612136565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061228682611bcf565b915061229183611bcf565b9250826122a1576122a061224c565b5b828204905092915050565b60006122b782611bcf565b91506122c283611bcf565b92508282039050818111156122da576122d9612136565b5b92915050565b60006060820190506122f56000830186611cb7565b6123026020830185611ca8565b61230f6040830184611ca8565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000612373602b83611ac5565b915061237e82612317565b604082019050919050565b600060208201905081810360008301526123a281612366565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b60006123df601583611ac5565b91506123ea826123a9565b602082019050919050565b6000602082019050818103600083015261240e816123d2565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b600061244b601483611ac5565b915061245682612415565b602082019050919050565b6000602082019050818103600083015261247a8161243e565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006124b7601583611ac5565b91506124c282612481565b602082019050919050565b600060208201905081810360008301526124e6816124aa565b9050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000612523601883611ac5565b915061252e826124ed565b602082019050919050565b6000602082019050818103600083015261255281612516565b905091905056fea2646970667358221220b4d09b9a28fb011edcf0480719177ced0e36d7e743e93b59f9d8d6118e05c6cf64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index 36c8071..d4885cc 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -19,6 +19,38 @@ "stateMutability": "nonpayable", "type": "constructor" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "AvailabilityStaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "WorkApprovalSubmitted", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -266,8 +298,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b50604051620019a6380380620019a6833981810160405281019062000037919062000134565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a0818152505050506200017b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ad8262000080565b9050919050565b6000620000c182620000a0565b9050919050565b620000d381620000b4565b8114620000df57600080fd5b50565b600081519050620000f381620000c8565b92915050565b6000819050919050565b6200010e81620000f9565b81146200011a57600080fd5b50565b6000815190506200012e8162000103565b92915050565b600080604083850312156200014e576200014d6200007b565b5b60006200015e85828601620000e2565b925050602062000171858286016200011d565b9150509250929050565b60805160a0516117f0620001b66000396000818161031001526108f10152600081816105690152818161077a015261083c01526117f06000f3fe60806040526004361061009c5760003560e01c8063854b6a4f11610064578063854b6a4f1461016a578063a035b1fe14610193578063b5b20c00146101be578063c4a32591146101e7578063c4a9e11614610210578063d5a44f861461023b5761009c565b8063216ed6ad146100a15780634b8b194c146100ca5780635badbe4c146100d45780638150d507146100ff57806381d12c5814610128575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610e9e565b61027c565b005b6100d261030e565b005b3480156100e057600080fd5b506100e9610404565b6040516100f69190610f00565b60405180910390f35b34801561010b57600080fd5b5061012660048036038101906101219190610f1b565b61040a565b005b34801561013457600080fd5b5061014f600480360381019061014a9190610f1b565b61060e565b60405161016196959493929190610fe9565b60405180910390f35b34801561017657600080fd5b50610191600480360381019061018c9190611076565b610684565b005b34801561019f57600080fd5b506101a86108ef565b6040516101b59190610f00565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906110b6565b610913565b005b3480156101f357600080fd5b5061020e60048036038101906102099190610f1b565b6109d4565b005b34801561021c57600080fd5b50610225610b78565b6040516102329190610f00565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190610f1b565b610b7e565b6040516102739594939291906110f6565b60405180910390f35b60008060006001600081548092919061029490611178565b9190505581526020019081526020016000209050838160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010181905550814261030091906111c0565b816002018190555050505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036890611251565b60405180910390fd5b60006003600081548092919061038690611178565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103f882610bee565b81600301819055505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a9906112e3565b60405180910390fd5b806002015442116104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ef90611375565b60405180910390fd5b8060030160019054906101000a900460ff161561054a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610541906113e1565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016105c6929190611401565b6020604051808303816000875af11580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061143f565b505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040160009054906101000a900460ff16908060050154905086565b6000600260008481526020019081526020016000209050600160038111156106af576106ae610f57565b5b8160020160009054906101000a900460ff1660038111156106d3576106d2610f57565b5b14610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a906114b8565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561075557610754610f57565b5b0217905550828260040160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ff754428360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016107f591906114d8565b6020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190611508565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fcb294b846001015483620151806040518463ffffffff1660e01b815260040161089d929190611535565b60206040518083038185885af11580156108bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108e09190611508565b83600501819055505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b2906115d0565b60405180910390fd5b81426109c791906111c0565b8160020181905550505050565b6000600260008381526020019081526020016000209050600060038111156109ff576109fe610f57565b5b8160020160009054906101000a900460ff166003811115610a2357610a22610f57565b5b14610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a9061163c565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b06906116ce565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610b3757610b36610f57565b5b02179055507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc83604051610b6b9190610f00565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b6000610bf8610c90565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507f429f9327062651dbcecaca0d28b9929067489d32d2c1133ec207c965f1f0ab198160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051610c82929190611401565b60405180910390a150919050565b60008060005b600154811015610d145760008082815260200190815260200160002060030160009054906101000a900460ff16610d0757600080828152602001908152602001600020600201544211610d07576000808281526020019081526020016000206001015482610d0491906111c0565b91505b8080600101915050610c96565b5060008111610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f9061173a565b60405180910390fd5b60008144610d669190611789565b9050600080600090505b600154811015610dfe5760008082815260200190815260200160002060030160009054906101000a900460ff16610df157600080828152602001908152602001600020600201544211610df1576000808281526020019081526020016000206001015482610dde91906111c0565b915082821115610df057809450610dfe565b5b8080600101915050610d70565b5050505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e3582610e0a565b9050919050565b610e4581610e2a565b8114610e5057600080fd5b50565b600081359050610e6281610e3c565b92915050565b6000819050919050565b610e7b81610e68565b8114610e8657600080fd5b50565b600081359050610e9881610e72565b92915050565b600080600060608486031215610eb757610eb6610e05565b5b6000610ec586828701610e53565b9350506020610ed686828701610e89565b9250506040610ee786828701610e89565b9150509250925092565b610efa81610e68565b82525050565b6000602082019050610f156000830184610ef1565b92915050565b600060208284031215610f3157610f30610e05565b5b6000610f3f84828501610e89565b91505092915050565b610f5181610e2a565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110610f9757610f96610f57565b5b50565b6000819050610fa882610f86565b919050565b6000610fb882610f9a565b9050919050565b610fc881610fad565b82525050565b60008115159050919050565b610fe381610fce565b82525050565b600060c082019050610ffe6000830189610f48565b61100b6020830188610ef1565b6110186040830187610fbf565b6110256060830186610ef1565b6110326080830185610fda565b61103f60a0830184610ef1565b979650505050505050565b61105381610fce565b811461105e57600080fd5b50565b6000813590506110708161104a565b92915050565b6000806040838503121561108d5761108c610e05565b5b600061109b85828601610e89565b92505060206110ac85828601611061565b9150509250929050565b600080604083850312156110cd576110cc610e05565b5b60006110db85828601610e89565b92505060206110ec85828601610e89565b9150509250929050565b600060a08201905061110b6000830188610f48565b6111186020830187610ef1565b6111256040830186610ef1565b6111326060830185610fda565b61113f6080830184610fda565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061118382610e68565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111b5576111b4611149565b5b600182019050919050565b60006111cb82610e68565b91506111d683610e68565b92508282019050808211156111ee576111ed611149565b5b92915050565b600082825260208201905092915050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b600061123b6010836111f4565b915061124682611205565b602082019050919050565b6000602082019050818103600083015261126a8161122e565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006112cd6034836111f4565b91506112d882611271565b604082019050919050565b600060208201905081810360008301526112fc816112c0565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061135f6022836111f4565b915061136a82611303565b604082019050919050565b6000602082019050818103600083015261138e81611352565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006113cb6020836111f4565b91506113d682611395565b602082019050919050565b600060208201905081810360008301526113fa816113be565b9050919050565b60006040820190506114166000830185610f48565b6114236020830184610ef1565b9392505050565b6000815190506114398161104a565b92915050565b60006020828403121561145557611454610e05565b5b60006114638482850161142a565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006114a26020836111f4565b91506114ad8261146c565b602082019050919050565b600060208201905081810360008301526114d181611495565b9050919050565b60006020820190506114ed6000830184610f48565b92915050565b60008151905061150281610e72565b92915050565b60006020828403121561151e5761151d610e05565b5b600061152c848285016114f3565b91505092915050565b600060408201905061154a6000830185610ef1565b6115576020830184610ef1565b9392505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006115ba6033836111f4565b91506115c58261155e565b604082019050919050565b600060208201905081810360008301526115e9816115ad565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006116266018836111f4565b9150611631826115f0565b602082019050919050565b6000602082019050818103600083015261165581611619565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006116b8603a836111f4565b91506116c38261165c565b604082019050919050565b600060208201905081810360008301526116e7816116ab565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611724601a836111f4565b915061172f826116ee565b602082019050919050565b6000602082019050818103600083015261175381611717565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061179482610e68565b915061179f83610e68565b9250826117af576117ae61175a565b5b82820690509291505056fea2646970667358221220698ef292a92e83917907ccdb19af1053f13041c8e0599e2c8a8ca3a48d1d604464736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063854b6a4f11610064578063854b6a4f1461016a578063a035b1fe14610193578063b5b20c00146101be578063c4a32591146101e7578063c4a9e11614610210578063d5a44f861461023b5761009c565b8063216ed6ad146100a15780634b8b194c146100ca5780635badbe4c146100d45780638150d507146100ff57806381d12c5814610128575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610e9e565b61027c565b005b6100d261030e565b005b3480156100e057600080fd5b506100e9610404565b6040516100f69190610f00565b60405180910390f35b34801561010b57600080fd5b5061012660048036038101906101219190610f1b565b61040a565b005b34801561013457600080fd5b5061014f600480360381019061014a9190610f1b565b61060e565b60405161016196959493929190610fe9565b60405180910390f35b34801561017657600080fd5b50610191600480360381019061018c9190611076565b610684565b005b34801561019f57600080fd5b506101a86108ef565b6040516101b59190610f00565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906110b6565b610913565b005b3480156101f357600080fd5b5061020e60048036038101906102099190610f1b565b6109d4565b005b34801561021c57600080fd5b50610225610b78565b6040516102329190610f00565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190610f1b565b610b7e565b6040516102739594939291906110f6565b60405180910390f35b60008060006001600081548092919061029490611178565b9190505581526020019081526020016000209050838160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010181905550814261030091906111c0565b816002018190555050505050565b7f0000000000000000000000000000000000000000000000000000000000000000341015610371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036890611251565b60405180910390fd5b60006003600081548092919061038690611178565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103f882610bee565b81600301819055505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a9906112e3565b60405180910390fd5b806002015442116104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ef90611375565b60405180910390fd5b8060030160019054906101000a900460ff161561054a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610541906113e1565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016105c6929190611401565b6020604051808303816000875af11580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061143f565b505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040160009054906101000a900460ff16908060050154905086565b6000600260008481526020019081526020016000209050600160038111156106af576106ae610f57565b5b8160020160009054906101000a900460ff1660038111156106d3576106d2610f57565b5b14610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a906114b8565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561075557610754610f57565b5b0217905550828260040160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ff754428360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016107f591906114d8565b6020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190611508565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fcb294b846001015483620151806040518463ffffffff1660e01b815260040161089d929190611535565b60206040518083038185885af11580156108bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108e09190611508565b83600501819055505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b2906115d0565b60405180910390fd5b81426109c791906111c0565b8160020181905550505050565b6000600260008381526020019081526020016000209050600060038111156109ff576109fe610f57565b5b8160020160009054906101000a900460ff166003811115610a2357610a22610f57565b5b14610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a9061163c565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b06906116ce565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610b3757610b36610f57565b5b02179055507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc83604051610b6b9190610f00565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b6000610bf8610c90565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507f429f9327062651dbcecaca0d28b9929067489d32d2c1133ec207c965f1f0ab198160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051610c82929190611401565b60405180910390a150919050565b60008060005b600154811015610d145760008082815260200190815260200160002060030160009054906101000a900460ff16610d0757600080828152602001908152602001600020600201544211610d07576000808281526020019081526020016000206001015482610d0491906111c0565b91505b8080600101915050610c96565b5060008111610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f9061173a565b60405180910390fd5b60008144610d669190611789565b9050600080600090505b600154811015610dfe5760008082815260200190815260200160002060030160009054906101000a900460ff16610df157600080828152602001908152602001600020600201544211610df1576000808281526020019081526020016000206001015482610dde91906111c0565b915082821115610df057809450610dfe565b5b8080600101915050610d70565b5050505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e3582610e0a565b9050919050565b610e4581610e2a565b8114610e5057600080fd5b50565b600081359050610e6281610e3c565b92915050565b6000819050919050565b610e7b81610e68565b8114610e8657600080fd5b50565b600081359050610e9881610e72565b92915050565b600080600060608486031215610eb757610eb6610e05565b5b6000610ec586828701610e53565b9350506020610ed686828701610e89565b9250506040610ee786828701610e89565b9150509250925092565b610efa81610e68565b82525050565b6000602082019050610f156000830184610ef1565b92915050565b600060208284031215610f3157610f30610e05565b5b6000610f3f84828501610e89565b91505092915050565b610f5181610e2a565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110610f9757610f96610f57565b5b50565b6000819050610fa882610f86565b919050565b6000610fb882610f9a565b9050919050565b610fc881610fad565b82525050565b60008115159050919050565b610fe381610fce565b82525050565b600060c082019050610ffe6000830189610f48565b61100b6020830188610ef1565b6110186040830187610fbf565b6110256060830186610ef1565b6110326080830185610fda565b61103f60a0830184610ef1565b979650505050505050565b61105381610fce565b811461105e57600080fd5b50565b6000813590506110708161104a565b92915050565b6000806040838503121561108d5761108c610e05565b5b600061109b85828601610e89565b92505060206110ac85828601611061565b9150509250929050565b600080604083850312156110cd576110cc610e05565b5b60006110db85828601610e89565b92505060206110ec85828601610e89565b9150509250929050565b600060a08201905061110b6000830188610f48565b6111186020830187610ef1565b6111256040830186610ef1565b6111326060830185610fda565b61113f6080830184610fda565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061118382610e68565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111b5576111b4611149565b5b600182019050919050565b60006111cb82610e68565b91506111d683610e68565b92508282019050808211156111ee576111ed611149565b5b92915050565b600082825260208201905092915050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b600061123b6010836111f4565b915061124682611205565b602082019050919050565b6000602082019050818103600083015261126a8161122e565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006112cd6034836111f4565b91506112d882611271565b604082019050919050565b600060208201905081810360008301526112fc816112c0565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061135f6022836111f4565b915061136a82611303565b604082019050919050565b6000602082019050818103600083015261138e81611352565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006113cb6020836111f4565b91506113d682611395565b602082019050919050565b600060208201905081810360008301526113fa816113be565b9050919050565b60006040820190506114166000830185610f48565b6114236020830184610ef1565b9392505050565b6000815190506114398161104a565b92915050565b60006020828403121561145557611454610e05565b5b60006114638482850161142a565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006114a26020836111f4565b91506114ad8261146c565b602082019050919050565b600060208201905081810360008301526114d181611495565b9050919050565b60006020820190506114ed6000830184610f48565b92915050565b60008151905061150281610e72565b92915050565b60006020828403121561151e5761151d610e05565b5b600061152c848285016114f3565b91505092915050565b600060408201905061154a6000830185610ef1565b6115576020830184610ef1565b9392505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006115ba6033836111f4565b91506115c58261155e565b604082019050919050565b600060208201905081810360008301526115e9816115ad565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006116266018836111f4565b9150611631826115f0565b602082019050919050565b6000602082019050818103600083015261165581611619565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006116b8603a836111f4565b91506116c38261165c565b604082019050919050565b600060208201905081810360008301526116e7816116ab565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611724601a836111f4565b915061172f826116ee565b602082019050919050565b6000602082019050818103600083015261175381611717565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061179482610e68565b915061179f83610e68565b9250826117af576117ae61175a565b5b82820690509291505056fea2646970667358221220698ef292a92e83917907ccdb19af1053f13041c8e0599e2c8a8ca3a48d1d604464736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001c4638038062001c46833981810160405281019062000037919062000134565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a0818152505050506200017b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ad8262000080565b9050919050565b6000620000c182620000a0565b9050919050565b620000d381620000b4565b8114620000df57600080fd5b50565b600081519050620000f381620000c8565b92915050565b6000819050919050565b6200010e81620000f9565b81146200011a57600080fd5b50565b6000815190506200012e8162000103565b92915050565b600080604083850312156200014e576200014d6200007b565b5b60006200015e85828601620000e2565b925050602062000171858286016200011d565b9150509250929050565b60805160a051611a90620001b6600039600081816103900152610a3301526000818161063b01528181610883015261097e0152611a906000f3fe60806040526004361061009c5760003560e01c8063854b6a4f11610064578063854b6a4f1461016a578063a035b1fe14610193578063b5b20c00146101be578063c4a32591146101e7578063c4a9e11614610210578063d5a44f861461023b5761009c565b8063216ed6ad146100a15780634b8b194c146100ca5780635badbe4c146100d45780638150d507146100ff57806381d12c5814610128575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190611017565b61027c565b005b6100d261038e565b005b3480156100e057600080fd5b506100e9610484565b6040516100f69190611079565b60405180910390f35b34801561010b57600080fd5b5061012660048036038101906101219190611094565b61048a565b005b34801561013457600080fd5b5061014f600480360381019061014a9190611094565b610717565b60405161016196959493929190611162565b60405180910390f35b34801561017657600080fd5b50610191600480360381019061018c91906111ef565b61078d565b005b34801561019f57600080fd5b506101a8610a31565b6040516101b59190611079565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e0919061122f565b610a55565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611094565b610b4d565b005b34801561021c57600080fd5b50610225610cf1565b6040516102329190611079565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190611094565b610cf7565b60405161027395949392919061126f565b60405180910390f35b600082116102bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b69061131f565b60405180910390fd5b6000600160008154809291906102d49061136e565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261034891906113b6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161037f9190611079565b60405180910390a15050505050565b7f00000000000000000000000000000000000000000000000000000000000000003410156103f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e890611436565b60405180910390fd5b6000600360008154809291906104069061136e565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047882610d67565b81600301819055505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610529906114c8565b60405180910390fd5b80600201544211610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9061155a565b60405180910390fd5b8060030160019054906101000a900460ff16156105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906115c6565b60405180910390fd5b8060030160009054906101000a900460ff161561061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390611658565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b8152600401610698929190611678565b6020604051808303816000875af11580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db91906116b6565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161070b9190611079565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040160009054906101000a900460ff16908060050154905086565b6000600260008481526020019081526020016000209050600160038111156107b8576107b76110d0565b5b8160020160009054906101000a900460ff1660038111156107dc576107db6110d0565b5b1461081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108139061172f565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561085e5761085d6110d0565b5b0217905550828260040160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ff754428360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016108fe919061174f565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610941919061177f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109749291906117ac565b60405180910390a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fcb294b846001015483620151806040518463ffffffff1660e01b81526004016109df9291906117d5565b60206040518083038185885af11580156109fd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a22919061177f565b83600501819055505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490611870565b60405180910390fd5b8142610b0991906113b6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610b409190611079565b60405180910390a1505050565b600060026000838152602001908152602001600020905060006003811115610b7857610b776110d0565b5b8160020160009054906101000a900460ff166003811115610b9c57610b9b6110d0565b5b14610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd3906118dc565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f9061196e565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cb057610caf6110d0565b5b02179055507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc83604051610ce49190611079565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b6000610d71610e09565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507f429f9327062651dbcecaca0d28b9929067489d32d2c1133ec207c965f1f0ab198160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051610dfb929190611678565b60405180910390a150919050565b60008060005b600154811015610e8d5760008082815260200190815260200160002060030160009054906101000a900460ff16610e8057600080828152602001908152602001600020600201544211610e80576000808281526020019081526020016000206001015482610e7d91906113b6565b91505b8080600101915050610e0f565b5060008111610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec8906119da565b60405180910390fd5b60008144610edf9190611a29565b9050600080600090505b600154811015610f775760008082815260200190815260200160002060030160009054906101000a900460ff16610f6a57600080828152602001908152602001600020600201544211610f6a576000808281526020019081526020016000206001015482610f5791906113b6565b915082821115610f6957809450610f77565b5b8080600101915050610ee9565b5050505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fae82610f83565b9050919050565b610fbe81610fa3565b8114610fc957600080fd5b50565b600081359050610fdb81610fb5565b92915050565b6000819050919050565b610ff481610fe1565b8114610fff57600080fd5b50565b60008135905061101181610feb565b92915050565b6000806000606084860312156110305761102f610f7e565b5b600061103e86828701610fcc565b935050602061104f86828701611002565b925050604061106086828701611002565b9150509250925092565b61107381610fe1565b82525050565b600060208201905061108e600083018461106a565b92915050565b6000602082840312156110aa576110a9610f7e565b5b60006110b884828501611002565b91505092915050565b6110ca81610fa3565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106111105761110f6110d0565b5b50565b6000819050611121826110ff565b919050565b600061113182611113565b9050919050565b61114181611126565b82525050565b60008115159050919050565b61115c81611147565b82525050565b600060c08201905061117760008301896110c1565b611184602083018861106a565b6111916040830187611138565b61119e606083018661106a565b6111ab6080830185611153565b6111b860a083018461106a565b979650505050505050565b6111cc81611147565b81146111d757600080fd5b50565b6000813590506111e9816111c3565b92915050565b6000806040838503121561120657611205610f7e565b5b600061121485828601611002565b9250506020611225858286016111da565b9150509250929050565b6000806040838503121561124657611245610f7e565b5b600061125485828601611002565b925050602061126585828601611002565b9150509250929050565b600060a08201905061128460008301886110c1565b611291602083018761106a565b61129e604083018661106a565b6112ab6060830185611153565b6112b86080830184611153565b9695505050505050565b600082825260208201905092915050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006113096011836112c2565b9150611314826112d3565b602082019050919050565b60006020820190508181036000830152611338816112fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061137982610fe1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ab576113aa61133f565b5b600182019050919050565b60006113c182610fe1565b91506113cc83610fe1565b92508282019050808211156113e4576113e361133f565b5b92915050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006114206010836112c2565b915061142b826113ea565b602082019050919050565b6000602082019050818103600083015261144f81611413565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006114b26034836112c2565b91506114bd82611456565b604082019050919050565b600060208201905081810360008301526114e1816114a5565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006115446022836112c2565b915061154f826114e8565b604082019050919050565b6000602082019050818103600083015261157381611537565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006115b06020836112c2565b91506115bb8261157a565b602082019050919050565b600060208201905081810360008301526115df816115a3565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006116426024836112c2565b915061164d826115e6565b604082019050919050565b6000602082019050818103600083015261167181611635565b9050919050565b600060408201905061168d60008301856110c1565b61169a602083018461106a565b9392505050565b6000815190506116b0816111c3565b92915050565b6000602082840312156116cc576116cb610f7e565b5b60006116da848285016116a1565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006117196020836112c2565b9150611724826116e3565b602082019050919050565b600060208201905081810360008301526117488161170c565b9050919050565b600060208201905061176460008301846110c1565b92915050565b60008151905061177981610feb565b92915050565b60006020828403121561179557611794610f7e565b5b60006117a38482850161176a565b91505092915050565b60006040820190506117c1600083018561106a565b6117ce6020830184611153565b9392505050565b60006040820190506117ea600083018561106a565b6117f7602083018461106a565b9392505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061185a6033836112c2565b9150611865826117fe565b604082019050919050565b600060208201905081810360008301526118898161184d565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006118c66018836112c2565b91506118d182611890565b602082019050919050565b600060208201905081810360008301526118f5816118b9565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611958603a836112c2565b9150611963826118fc565b604082019050919050565b600060208201905081810360008301526119878161194b565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006119c4601a836112c2565b91506119cf8261198e565b602082019050919050565b600060208201905081810360008301526119f3816119b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a3482610fe1565b9150611a3f83610fe1565b925082611a4f57611a4e6119fa565b5b82820690509291505056fea26469706673582212200a57d2eb2cfa6be9553882c71cf176c4a25d9a31d72be707fc9ae4ac25adab4464736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063854b6a4f11610064578063854b6a4f1461016a578063a035b1fe14610193578063b5b20c00146101be578063c4a32591146101e7578063c4a9e11614610210578063d5a44f861461023b5761009c565b8063216ed6ad146100a15780634b8b194c146100ca5780635badbe4c146100d45780638150d507146100ff57806381d12c5814610128575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190611017565b61027c565b005b6100d261038e565b005b3480156100e057600080fd5b506100e9610484565b6040516100f69190611079565b60405180910390f35b34801561010b57600080fd5b5061012660048036038101906101219190611094565b61048a565b005b34801561013457600080fd5b5061014f600480360381019061014a9190611094565b610717565b60405161016196959493929190611162565b60405180910390f35b34801561017657600080fd5b50610191600480360381019061018c91906111ef565b61078d565b005b34801561019f57600080fd5b506101a8610a31565b6040516101b59190611079565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e0919061122f565b610a55565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611094565b610b4d565b005b34801561021c57600080fd5b50610225610cf1565b6040516102329190611079565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190611094565b610cf7565b60405161027395949392919061126f565b60405180910390f35b600082116102bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b69061131f565b60405180910390fd5b6000600160008154809291906102d49061136e565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261034891906113b6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161037f9190611079565b60405180910390a15050505050565b7f00000000000000000000000000000000000000000000000000000000000000003410156103f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e890611436565b60405180910390fd5b6000600360008154809291906104069061136e565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047882610d67565b81600301819055505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610529906114c8565b60405180910390fd5b80600201544211610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9061155a565b60405180910390fd5b8060030160019054906101000a900460ff16156105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906115c6565b60405180910390fd5b8060030160009054906101000a900460ff161561061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390611658565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b8152600401610698929190611678565b6020604051808303816000875af11580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db91906116b6565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161070b9190611079565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040160009054906101000a900460ff16908060050154905086565b6000600260008481526020019081526020016000209050600160038111156107b8576107b76110d0565b5b8160020160009054906101000a900460ff1660038111156107dc576107db6110d0565b5b1461081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108139061172f565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561085e5761085d6110d0565b5b0217905550828260040160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ff754428360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016108fe919061174f565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610941919061177f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109749291906117ac565b60405180910390a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fcb294b846001015483620151806040518463ffffffff1660e01b81526004016109df9291906117d5565b60206040518083038185885af11580156109fd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a22919061177f565b83600501819055505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490611870565b60405180910390fd5b8142610b0991906113b6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610b409190611079565b60405180910390a1505050565b600060026000838152602001908152602001600020905060006003811115610b7857610b776110d0565b5b8160020160009054906101000a900460ff166003811115610b9c57610b9b6110d0565b5b14610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd3906118dc565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f9061196e565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cb057610caf6110d0565b5b02179055507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc83604051610ce49190611079565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b6000610d71610e09565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507f429f9327062651dbcecaca0d28b9929067489d32d2c1133ec207c965f1f0ab198160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051610dfb929190611678565b60405180910390a150919050565b60008060005b600154811015610e8d5760008082815260200190815260200160002060030160009054906101000a900460ff16610e8057600080828152602001908152602001600020600201544211610e80576000808281526020019081526020016000206001015482610e7d91906113b6565b91505b8080600101915050610e0f565b5060008111610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec8906119da565b60405180910390fd5b60008144610edf9190611a29565b9050600080600090505b600154811015610f775760008082815260200190815260200160002060030160009054906101000a900460ff16610f6a57600080828152602001908152602001600020600201544211610f6a576000808281526020019081526020016000206001015482610f5791906113b6565b915082821115610f6957809450610f77565b5b8080600101915050610ee9565b5050505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fae82610f83565b9050919050565b610fbe81610fa3565b8114610fc957600080fd5b50565b600081359050610fdb81610fb5565b92915050565b6000819050919050565b610ff481610fe1565b8114610fff57600080fd5b50565b60008135905061101181610feb565b92915050565b6000806000606084860312156110305761102f610f7e565b5b600061103e86828701610fcc565b935050602061104f86828701611002565b925050604061106086828701611002565b9150509250925092565b61107381610fe1565b82525050565b600060208201905061108e600083018461106a565b92915050565b6000602082840312156110aa576110a9610f7e565b5b60006110b884828501611002565b91505092915050565b6110ca81610fa3565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106111105761110f6110d0565b5b50565b6000819050611121826110ff565b919050565b600061113182611113565b9050919050565b61114181611126565b82525050565b60008115159050919050565b61115c81611147565b82525050565b600060c08201905061117760008301896110c1565b611184602083018861106a565b6111916040830187611138565b61119e606083018661106a565b6111ab6080830185611153565b6111b860a083018461106a565b979650505050505050565b6111cc81611147565b81146111d757600080fd5b50565b6000813590506111e9816111c3565b92915050565b6000806040838503121561120657611205610f7e565b5b600061121485828601611002565b9250506020611225858286016111da565b9150509250929050565b6000806040838503121561124657611245610f7e565b5b600061125485828601611002565b925050602061126585828601611002565b9150509250929050565b600060a08201905061128460008301886110c1565b611291602083018761106a565b61129e604083018661106a565b6112ab6060830185611153565b6112b86080830184611153565b9695505050505050565b600082825260208201905092915050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006113096011836112c2565b9150611314826112d3565b602082019050919050565b60006020820190508181036000830152611338816112fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061137982610fe1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ab576113aa61133f565b5b600182019050919050565b60006113c182610fe1565b91506113cc83610fe1565b92508282019050808211156113e4576113e361133f565b5b92915050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006114206010836112c2565b915061142b826113ea565b602082019050919050565b6000602082019050818103600083015261144f81611413565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006114b26034836112c2565b91506114bd82611456565b604082019050919050565b600060208201905081810360008301526114e1816114a5565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006115446022836112c2565b915061154f826114e8565b604082019050919050565b6000602082019050818103600083015261157381611537565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006115b06020836112c2565b91506115bb8261157a565b602082019050919050565b600060208201905081810360008301526115df816115a3565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006116426024836112c2565b915061164d826115e6565b604082019050919050565b6000602082019050818103600083015261167181611635565b9050919050565b600060408201905061168d60008301856110c1565b61169a602083018461106a565b9392505050565b6000815190506116b0816111c3565b92915050565b6000602082840312156116cc576116cb610f7e565b5b60006116da848285016116a1565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006117196020836112c2565b9150611724826116e3565b602082019050919050565b600060208201905081810360008301526117488161170c565b9050919050565b600060208201905061176460008301846110c1565b92915050565b60008151905061177981610feb565b92915050565b60006020828403121561179557611794610f7e565b5b60006117a38482850161176a565b91505092915050565b60006040820190506117c1600083018561106a565b6117ce6020830184611153565b9392505050565b60006040820190506117ea600083018561106a565b6117f7602083018461106a565b9392505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061185a6033836112c2565b9150611865826117fe565b604082019050919050565b600060208201905081810360008301526118898161184d565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006118c66018836112c2565b91506118d182611890565b602082019050919050565b600060208201905081810360008301526118f5816118b9565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611958603a836112c2565b9150611963826118fc565b604082019050919050565b600060208201905081810360008301526119878161194b565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006119c4601a836112c2565b91506119cf8261198e565b602082019050919050565b600060208201905081810360008301526119f3816119b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a3482610fe1565b9150611a3f83610fe1565b925082611a4f57611a4e6119fa565b5b82820690509291505056fea26469706673582212200a57d2eb2cfa6be9553882c71cf176c4a25d9a31d72be707fc9ae4ac25adab4464736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/ethereum/contracts/Work1.sol b/ethereum/contracts/Work1.sol index afbed8d..db094d6 100644 --- a/ethereum/contracts/Work1.sol +++ b/ethereum/contracts/Work1.sol @@ -39,8 +39,10 @@ contract Work1 is IAcceptAvailability { // TODO: Make parameters configurable uint constant POOL_DURATION = 1 days; + event AvailabilityStaked(uint stakeIndex); event WorkAssigned(address worker, uint requestIndex); event WorkEvidenceSubmitted(uint requestIndex); + event WorkApprovalSubmitted(uint requestIndex, bool approval); constructor(DAO dao_, uint price_) { dao = dao_; @@ -53,10 +55,13 @@ contract Work1 is IAcceptAvailability { uint256 amount, uint duration ) external { - AvailabilityStake storage stake = stakes[stakeCount++]; + require(amount > 0, "No stake provided"); + uint stakeIndex = stakeCount++; + AvailabilityStake storage stake = stakes[stakeIndex]; stake.worker = sender; stake.amount = amount; stake.endTime = block.timestamp + duration; + emit AvailabilityStaked(stakeIndex); } function extendAvailability(uint stakeIndex, uint duration) external { @@ -66,6 +71,7 @@ contract Work1 is IAcceptAvailability { "Worker can only extend their own availability stake" ); stake.endTime = block.timestamp + duration; + emit AvailabilityStaked(stakeIndex); } function reclaimAvailability(uint stakeIndex) external { @@ -79,8 +85,10 @@ contract Work1 is IAcceptAvailability { "Stake duration has not yet elapsed" ); require(!stake.reclaimed, "Stake has already been reclaimed"); + require(!stake.assigned, "Stake has already been assigned work"); stake.reclaimed = true; dao.transfer(msg.sender, stake.amount); + emit AvailabilityStaked(stakeIndex); } /// Select a worker randomly from among the available workers, weighted by amount staked @@ -151,6 +159,7 @@ contract Work1 is IAcceptAvailability { request.approval = approval; // Make work evidence post uint postIndex = dao.addPost(stake.worker); + emit WorkApprovalSubmitted(requestIndex, approval); // Initiate validation pool request.poolIndex = dao.initiateValidationPool{value: request.fee}( postIndex, diff --git a/ethereum/test/Work1.js b/ethereum/test/Work1.js index d0c0fb5..ddfe4cb 100644 --- a/ethereum/test/Work1.js +++ b/ethereum/test/Work1.js @@ -49,7 +49,7 @@ describe('Work1', () => { work1 = setup.work1; account1 = setup.account1; account2 = setup.account2; - await dao.stakeAvailability(work1.target, 50, STAKE_DURATION); + await expect(dao.stakeAvailability(work1.target, 50, STAKE_DURATION)).to.emit(work1, 'AvailabilityStaked').withArgs(0); }); it('Should be able to stake availability', async () => { @@ -62,13 +62,24 @@ describe('Work1', () => { expect(stake.endTime).to.equal(await time.latest() + STAKE_DURATION); }); + it('should not be able to stake availability without reputation value', async () => { + await expect(dao.stakeAvailability(work1.target, 0, STAKE_DURATION)).to.be.revertedWith('No stake provided'); + }); + it('should be able to reclaim staked availability after duration elapses', async () => { expect(await dao.balanceOf(account1)).to.equal(50); time.increase(STAKE_DURATION + 1); - await work1.reclaimAvailability(0); + await expect(work1.reclaimAvailability(0)).to.emit(work1, 'AvailabilityStaked').withArgs(0); expect(await dao.balanceOf(account1)).to.equal(100); }); + it('should not be able to reclaim staked availability twice', async () => { + expect(await dao.balanceOf(account1)).to.equal(50); + time.increase(STAKE_DURATION + 1); + await work1.reclaimAvailability(0); + await expect(work1.reclaimAvailability(0)).to.be.revertedWith('Stake has already been reclaimed'); + }); + it('should not be able to reclaim staked availability before duration elapses', async () => { await expect(work1.reclaimAvailability(0)).to.be.revertedWith('Stake duration has not yet elapsed'); }); @@ -80,7 +91,7 @@ describe('Work1', () => { it('should be able to extend the duration of an availability stake before it expires', async () => { await time.increase(STAKE_DURATION / 2); - await work1.extendAvailability(0, STAKE_DURATION); + await expect(work1.extendAvailability(0, STAKE_DURATION)).to.emit(work1, 'AvailabilityStaked').withArgs(0); }); it('should be able to extend the duration of an availability stake after it expires', async () => { @@ -107,6 +118,16 @@ describe('Work1', () => { expect(request.customer).to.equal(account2); }); + it('should not be able to reclaim stake after work is assigned', async () => { + const { + dao, work1, account1, account2, + } = await loadFixture(deploy); + await dao.stakeAvailability(work1.target, 50, STAKE_DURATION); + const requestWork = () => work1.connect(account2).requestWork({ value: WORK1_PRICE }); + await expect(requestWork()).to.emit(work1, 'WorkAssigned').withArgs(account1, 0); + await time.increase(STAKE_DURATION + 1); + await expect(work1.reclaimAvailability(0)).to.be.revertedWith('Stake has already been assigned work'); + }); it('should not be able to request work if there are no availability stakes', async () => { const { work1, account2, @@ -129,7 +150,7 @@ describe('Work1', () => { } = await loadFixture(deploy); await dao.stakeAvailability(work1.target, 50, STAKE_DURATION); const requestWork = () => work1.connect(account2).requestWork({ value: WORK1_PRICE }); - await time.increase(61); + await time.increase(STAKE_DURATION + 1); await expect(requestWork()).to.be.revertedWith('No available worker stakes'); }); @@ -178,7 +199,9 @@ describe('Work1', () => { it('should be able to submit work approval', async () => { await work1.connect(account2).requestWork({ value: WORK1_PRICE }); await work1.submitWorkEvidence(0); - await expect(work1.submitWorkApproval(0, true)).to.emit(dao, 'ValidationPoolInitiated').withArgs(1); + await expect(work1.submitWorkApproval(0, true)) + .to.emit(dao, 'ValidationPoolInitiated').withArgs(1) + .to.emit(work1, 'WorkApprovalSubmitted').withArgs(0, true); const post = await dao.posts(1); expect(post.author).to.equal(account1); expect(post.sender).to.equal(work1.target); @@ -187,7 +210,9 @@ describe('Work1', () => { it('should be able to submit work disapproval', async () => { await work1.connect(account2).requestWork({ value: WORK1_PRICE }); await work1.submitWorkEvidence(0); - await expect(work1.submitWorkApproval(0, false)).to.emit(dao, 'ValidationPoolInitiated').withArgs(1); + await expect(work1.submitWorkApproval(0, false)) + .to.emit(dao, 'ValidationPoolInitiated').withArgs(1) + .to.emit(work1, 'WorkApprovalSubmitted').withArgs(0, false); }); it('should not be able to submit work approval/disapproval twice', async () => {