From 04c31e0b902102b425ffbaadab86630dc66c77e0 Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Sun, 31 Mar 2024 12:59:57 -0500 Subject: [PATCH] Implement price change proposal workflow --- backend/index.js | 29 ++++- client/src/App.jsx | 15 ++- client/src/assets/DAO.json | 4 +- client/src/assets/Onboarding.json | 92 +++++++++++++++- client/src/assets/Proposals.json | 24 ++++- client/src/assets/Work1.json | 92 +++++++++++++++- client/src/components/posts/ViewPostModal.jsx | 9 +- .../work-contracts/PriceProposals.jsx | 56 ++++++++++ .../ProposePriceChangeModal.jsx | 102 ++++++++++++++++++ .../work-contracts/WorkContract.jsx | 51 ++++++++- .../work-contracts/WorkRequests.jsx | 19 +--- client/src/contract-addresses.json | 8 +- client/src/utils/Post.js | 35 ++++-- ethereum/contract-addresses.json | 8 +- ethereum/contracts/IOnProposalAccepted.sol | 10 ++ ethereum/contracts/Onboarding.sol | 6 +- ethereum/contracts/Proposals.sol | 6 ++ ethereum/contracts/Work1.sol | 7 +- ethereum/contracts/WorkContract.sol | 60 ++++++++++- ethereum/scripts/deploy.js | 2 +- ethereum/scripts/util/deploy-work-contract.js | 5 +- ethereum/test/Work1.js | 17 ++- 22 files changed, 599 insertions(+), 58 deletions(-) create mode 100644 client/src/components/work-contracts/PriceProposals.jsx create mode 100644 client/src/components/work-contracts/ProposePriceChangeModal.jsx create mode 100644 ethereum/contracts/IOnProposalAccepted.sol diff --git a/backend/index.js b/backend/index.js index 739ecc7..8d80c02 100644 --- a/backend/index.js +++ b/backend/index.js @@ -11,9 +11,15 @@ const dataDir = process.env.DATA_DIR || 'data'; const db = new Level(`${dataDir}/forum`, { valueEncoding: 'json' }); -const verifySignature = ({ author, content, signature }) => { +const verifySignature = ({ + author, content, signature, embeddedData, +}) => { + let contentToVerify = content; + if (embeddedData && Object.entries(embeddedData).length) { + contentToVerify += `\n\n${JSON.stringify(embeddedData, null, 2)}`; + } try { - const account = recoverPersonalSignature({ data: content, signature }); + const account = recoverPersonalSignature({ data: contentToVerify, signature }); if (account !== author) { console.log('error: author does not match signature'); return false; @@ -28,17 +34,26 @@ const verifySignature = ({ author, content, signature }) => { app.use(express.json()); app.post('/write', async (req, res) => { - const { body: { author, content, signature } } = req; + const { + body: { + author, content, signature, embeddedData, + }, + } = req; // Check author signature - if (!verifySignature({ author, content, signature })) { + if (!verifySignature({ + author, content, signature, embeddedData, + })) { res.status(403).end(); return; } // Compute content hash - const data = { author, content, signature }; + const data = { + author, content, signature, embeddedData, + }; const hash = objectHash(data); console.log('write', hash); + console.log(data); // Store content db.put(hash, data); @@ -61,6 +76,10 @@ app.get('/read/:hash', async (req, res) => { return; } + data.embeddedData = data.embeddedData || undefined; + + console.log(data); + // Verify hash const derivedHash = objectHash(data); if (derivedHash !== hash) { diff --git a/client/src/App.jsx b/client/src/App.jsx index 15f03d2..de9a293 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -480,10 +480,21 @@ function App() { {work1 && ( - + )} {onboarding && ( - + )} diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index bf12510..3e41db7 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -719,8 +719,8 @@ "type": "function" } ], - "bytecode": "0x60806040526040518060400160405280600160ff168152602001600a60ff16815250600c90600262000033929190620000da565b503480156200004157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000bf9190620003bd565b508060049081620000d19190620003bd565b505050620004a4565b826002810192821562000111579160200282015b8281111562000110578251829060ff16905591602001919060010190620000ee565b5b50905062000120919062000124565b5090565b5b808211156200013f57600081600090555060010162000125565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001c557607f821691505b602082108103620001db57620001da6200017d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000206565b62000251868362000206565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200029e62000298620002928462000269565b62000273565b62000269565b9050919050565b6000819050919050565b620002ba836200027d565b620002d2620002c982620002a5565b84845462000213565b825550505050565b600090565b620002e9620002da565b620002f6818484620002af565b505050565b5b818110156200031e5762000312600082620002df565b600181019050620002fc565b5050565b601f8211156200036d576200033781620001e1565b6200034284620001f6565b8101602085101562000352578190505b6200036a6200036185620001f6565b830182620002fb565b50505b505050565b600082821c905092915050565b6000620003926000198460080262000372565b1980831691505092915050565b6000620003ad83836200037f565b9150826002028217905092915050565b620003c88262000143565b67ffffffffffffffff811115620003e457620003e36200014e565b5b620003f08254620001ac565b620003fd82828562000322565b600060209050601f83116001811462000435576000841562000420578287015190505b6200042c85826200039f565b8655506200049c565b601f1984166200044586620001e1565b60005b828110156200046f5784890151825560018201915060208501945060208101905062000448565b868310156200048f57848901516200048b601f8916826200037f565b8355505b6001600288020188555050505b505050505050565b613de180620004b46000396000f3fe60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b6040516101519190612806565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906128d0565b610630565b60405161018e919061292b565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612946565b610653565b6040516101ce9493929190612991565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f991906129dd565b60405180910390f35b34801561020e57600080fd5b50610217610751565b60405161022491906129dd565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612946565b610757565b604051610261919061292b565b60405180910390f35b34801561027657600080fd5b5061027f61127d565b60405161028c91906129dd565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b791906129f8565b611287565b6040516102c9919061292b565b60405180910390f35b3480156102de57600080fd5b506102e76112b6565b6040516102f49190612a67565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612aae565b6112bf565b005b34801561033257600080fd5b5061034d60048036038101906103489190612946565b6112ea565b60405161035a9190612b01565b60405180910390f35b34801561036f57600080fd5b5061037861131d565b60405161038591906129dd565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b1c565b611323565b6040516103c291906129dd565b60405180910390f35b6103e560048036038101906103e09190612bd0565b61136b565b6040516103f291906129dd565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ca8565b6118ed565b60405161042f919061292b565b60405180910390f35b34801561044457600080fd5b5061044d611978565b60405161045a9190612806565b60405180910390f35b34801561046f57600080fd5b5061048a60048036038101906104859190612b1c565b611a0a565b604051610497919061292b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612946565b611a2a565b6040516104de9b9a99989796959493929190612e72565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906128d0565b611c16565b60405161051b919061292b565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612f27565b611c39565b60405161055891906129dd565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612fbd565b611cc0565b60405161059591906129dd565b60405180910390f35b6060600380546105ad9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546105d99061304c565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611dd4565b9050610648818585611ddc565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c89061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546106f49061304c565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600d015442116107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906130ef565b60405180910390fd5b6000151582600e0160009054906101000a900460ff16151514610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061315b565b60405180910390fd5b600080600080600090505b85600401548110156108a45785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108845781600201548461087d91906131aa565b9350610897565b81600201548361089491906131aa565b92505b8080600101915050610833565b50846005016001016000600281106108bf576108be6131de565b5b01546108c961127d565b6108d3919061320d565b82846108df91906131aa565b866005016001016001600281106108f9576108f86131de565b5b0154610905919061320d565b11610b445760005b8560040154811015610970578560030160008281526020019081526020016000209150610963308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611dee565b808060010191505061090d565b5084600e0160029054906101000a900460ff1615610add578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b81526004016109f19594939291906132e8565b600060405180830381600087803b158015610a0b57600080fd5b505af1925050508015610a1c575060015b610a9d57610a2861334f565b806308c379a003610a8c5750610a3c6133d1565b80610a475750610a8e565b610a866040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50610a98565b505b3d6000803e3d6000fd5b610adc565b610adb6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187600080604051610b2e93929190613461565b60405180910390a1600095505050505050611278565b84600501600301600060028110610b5e57610b5d6131de565b5b01548284610b6c91906131aa565b610b76919061320d565b85600501600301600160028110610b9057610b8f6131de565b5b015484610b9d919061320d565b10159550858015610c1c5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610d2a578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610c5d90613498565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d9793929190613461565b60405180910390a1600086610dac5782610dae565b835b9050600087610dbd5784610dbf565b835b9050600080600090505b8860040154811015610fee57886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610e11578960050160050154610e14565b60645b90508560010160009054906101000a900460ff1615158b151503610efa5760008660030160149054906101000a900460ff1680610e6257508a60050160060160009054906101000a900460ff165b9050600081610e72576000610ea5565b606483610e7f919061350f565b87878a60020154610e90919061320d565b610e9a919061350f565b610ea4919061320d565b5b9050610ee5308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610ee091906131aa565b611dee565b8085610ef191906131aa565b94505050610fe0565b8560030160149054906101000a900460ff16610fdf5760006064826064610f219190613540565b8860020154610f30919061320d565b610f3a919061350f565b90506000811115610f7557610f74308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b8a60050160060160009054906101000a900460ff16610fcf57600060648c600501600501548960020154610fa9919061320d565b610fb3919061350f565b9050610fbf3082612148565b8085610fcb91906131aa565b9450505b8084610fdb91906131aa565b9350505b5b508080600101915050610dc9565b5060008183610ffd9190613540565b9050600081111561103857611037308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b60005b6006548110156111015760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061108761127d565b61109083611323565b8d600c015461109f919061320d565b6110a9919061350f565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f1573d6000803e3d6000fd5b505050808060010191505061103b565b5088600e0160029054906101000a900460ff161561126e578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b81526004016111829594939291906132e8565b600060405180830381600087803b15801561119c57600080fd5b505af19250505080156111ad575060015b61122e576111b961334f565b806308c379a00361121d57506111cd6133d1565b806111d8575061121f565b6112176040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50611229565b505b3d6000803e3d6000fd5b61126d565b61126c6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b5050505050505050505b919050565b6000600254905090565b600080611292611dd4565b905061129f8582856121ca565b6112aa85858561225e565b60019150509392505050565b60006009905090565b60006008600085815260200190815260200160002090506112e4813385856000612352565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906135e6565b60405180910390fd5b60018910156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613652565b60405180910390fd5b651cae8c13e00089111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906136be565b60405180910390fd5b876001600281106114505761144f6131de565b5b6020020135600c60006002811061146a576114696131de565b5b0154611476919061320d565b8860006002811061148a576114896131de565b5b6020020135600c6001600281106114a4576114a36131de565b5b01546114b0919061320d565b10156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061372a565b60405180910390fd5b87600160028110611505576115046131de565b5b60200201358860006002811061151e5761151d6131de565b5b60200201351115611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613796565b60405180910390fd5b86600160028110611578576115776131de565b5b602002013587600060028110611591576115906131de565b5b602002013511156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613802565b60405180910390fd5b606486111561161b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116129061386e565b60405180910390fd5b6000600a60008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906138da565b60405180910390fd5b600960008154809291906116d890613498565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261176092919061270f565b50888160050160030190600261177792919061270f565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426117bb91906131aa565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826117fb929190613a9c565b5061182a8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612470565b611868818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234611860919061350f565b600180612352565b6118a7818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461189e919061350f565b60006001612352565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118d691906129dd565b60405180910390a150509998505050505050505050565b60006118f98484611c16565b90508015611971578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161193e93929190613b6c565b600060405180830381600087803b15801561195857600080fd5b505af115801561196c573d6000803e3d6000fd5b505050505b9392505050565b6060600480546119879061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119b39061304c565b8015611a005780601f106119d557610100808354040283529160200191611a00565b820191906000526020600020905b8154815290600101906020018083116119e357829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611acb576020028201915b815481526020019060010190808311611ab7575b5050505050815260200160038201600280602002604051908101604052809291908260028015611b10576020028201915b815481526020019060010190808311611afc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611b939061304c565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf9061304c565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505090508b565b600080611c21611dd4565b9050611c2e81858561225e565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b6000815480929190611cd590613498565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611d94929190613c09565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611dc491906129dd565b60405180910390a1509392505050565b600033905090565b611de983838360016124f2565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e40578060026000828254611e3491906131aa565b92505081905550611f13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ec393929190613b6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f5c5780600260008282540392505081905550611fa9565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200691906129dd565b60405180910390a3505050565b6120ab8282604051602401612029929190613cd9565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b5050565b612145816040516024016120c39190612806565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ba5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121b19190612b01565b60405180910390fd5b6121c682600083611dee565b5050565b60006121d68484611c39565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122585781811015612248578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161223f93929190613b6c565b60405180910390fd5b612257848484840360006124f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122c79190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123425760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123399190612b01565b60405180910390fd5b61234d838383611dee565b505050565b84600d0154421115612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613d5c565b60405180910390fd5b6123a4843085611dee565b60008560040160008154809291906123bb90613498565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016124d99190612b01565b60405180910390fd5b6124ee60008383611dee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125645760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161255b9190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d65760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125cd9190612b01565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156126c3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516126ba91906129dd565b60405180910390a35b50505050565b6126e0816126d86126e3612704565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b61274f819050919050565b826002810192821561273e579160200282015b8281111561273d578235825591602001919060010190612722565b5b50905061274b9190612759565b5090565b612757613d7c565b565b5b8082111561277257600081600090555060010161275a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b0578082015181840152602081019050612795565b60008484015250505050565b6000601f19601f8301169050919050565b60006127d882612776565b6127e28185612781565b93506127f2818560208601612792565b6127fb816127bc565b840191505092915050565b6000602082019050818103600083015261282081846127cd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128678261283c565b9050919050565b6128778161285c565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000819050919050565b6128ad8161289a565b81146128b857600080fd5b50565b6000813590506128ca816128a4565b92915050565b600080604083850312156128e7576128e6612832565b5b60006128f585828601612885565b9250506020612906858286016128bb565b9150509250929050565b60008115159050919050565b61292581612910565b82525050565b6000602082019050612940600083018461291c565b92915050565b60006020828403121561295c5761295b612832565b5b600061296a848285016128bb565b91505092915050565b61297c8161289a565b82525050565b61298b8161285c565b82525050565b60006080820190506129a66000830187612973565b6129b36020830186612982565b6129c06040830185612982565b81810360608301526129d281846127cd565b905095945050505050565b60006020820190506129f26000830184612973565b92915050565b600080600060608486031215612a1157612a10612832565b5b6000612a1f86828701612885565b9350506020612a3086828701612885565b9250506040612a41868287016128bb565b9150509250925092565b600060ff82169050919050565b612a6181612a4b565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b612a8b81612910565b8114612a9657600080fd5b50565b600081359050612aa881612a82565b92915050565b600080600060608486031215612ac757612ac6612832565b5b6000612ad5868287016128bb565b9350506020612ae6868287016128bb565b9250506040612af786828701612a99565b9150509250925092565b6000602082019050612b166000830184612982565b92915050565b600060208284031215612b3257612b31612832565b5b6000612b4084828501612885565b91505092915050565b600080fd5b600081905082602060020282011115612b6a57612b69612b49565b5b92915050565b600080fd5b600080fd5b60008083601f840112612b9057612b8f612b70565b5b8235905067ffffffffffffffff811115612bad57612bac612b75565b5b602083019150836001820283011115612bc957612bc8612b49565b5b9250929050565b60008060008060008060008060006101408a8c031215612bf357612bf2612832565b5b6000612c018c828d016128bb565b9950506020612c128c828d016128bb565b9850506040612c238c828d01612b4e565b9750506080612c348c828d01612b4e565b96505060c0612c458c828d016128bb565b95505060e0612c568c828d01612a99565b945050610100612c688c828d01612a99565b9350506101208a013567ffffffffffffffff811115612c8a57612c89612837565b5b612c968c828d01612b7a565b92509250509295985092959850929598565b600080600060608486031215612cc157612cc0612832565b5b6000612ccf86828701612885565b9350506020612ce0868287016128bb565b9250506040612cf1868287016128bb565b9150509250925092565b612d048161289a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612d368383612cfb565b60208301905092915050565b6000602082019050919050565b612d5881612d0a565b612d628184612d15565b9250612d6d82612d20565b8060005b83811015612d9e578151612d858782612d2a565b9650612d9083612d42565b925050600181019050612d71565b505050505050565b612daf81612910565b82525050565b60e082016000820151612dcb6000850182612cfb565b506020820151612dde6020850182612d4f565b506040820151612df16060850182612d4f565b506060820151612e0460a0850182612cfb565b506080820151612e1760c0850182612da6565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612e4482612e1d565b612e4e8185612e28565b9350612e5e818560208601612792565b612e67816127bc565b840191505092915050565b600061022082019050612e88600083018e612973565b612e95602083018d612973565b612ea2604083018c612982565b612eaf606083018b612973565b612ebc608083018a612db5565b612eca610160830189612973565b612ed8610180830188612973565b612ee66101a083018761291c565b612ef46101c083018661291c565b612f026101e083018561291c565b818103610200830152612f158184612e39565b90509c9b505050505050505050505050565b60008060408385031215612f3e57612f3d612832565b5b6000612f4c85828601612885565b9250506020612f5d85828601612885565b9150509250929050565b60008083601f840112612f7d57612f7c612b70565b5b8235905067ffffffffffffffff811115612f9a57612f99612b75565b5b602083019150836001820283011115612fb657612fb5612b49565b5b9250929050565b600080600060408486031215612fd657612fd5612832565b5b6000612fe486828701612885565b935050602084013567ffffffffffffffff81111561300557613004612837565b5b61301186828701612f67565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306457607f821691505b6020821081036130775761307661301d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006130d9602183612781565b91506130e48261307d565b604082019050919050565b60006020820190508181036000830152613108816130cc565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613145601883612781565b91506131508261310f565b602082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b58261289a565b91506131c08361289a565b92508282019050808211156131d8576131d761317b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132188261289a565b91506132238361289a565b92508282026132318161289a565b915082820484148315176132485761324761317b565b5b5092915050565b60008190508160005260206000209050919050565b600081546132718161304c565b61327b8186612e28565b9450600182166000811461329657600181146132ac576132df565b60ff1983168652811515602002860193506132df565b6132b58561324f565b60005b838110156132d7578154818901526001820191506020810190506132b8565b808801955050505b50505092915050565b600060a0820190506132fd600083018861291c565b61330a602083018761291c565b6133176040830186612973565b6133246060830185612973565b81810360808301526133368184613264565b90509695505050505050565b60008160e01c9050919050565b600060033d111561336e5760046000803e61336b600051613342565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133a9826127bc565b810181811067ffffffffffffffff821117156133c8576133c7613371565b5b80604052505050565b600060443d1061345e576133e3612828565b60043d036004823e80513d602482011167ffffffffffffffff8211171561340b57505061345e565b808201805167ffffffffffffffff811115613429575050505061345e565b80602083010160043d03850181111561344657505050505061345e565b613455826020018501866133a0565b82955050505050505b90565b60006060820190506134766000830186612973565b613483602083018561291c565b613490604083018461291c565b949350505050565b60006134a38261289a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d5576134d461317b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351a8261289a565b91506135258361289a565b925082613535576135346134e0565b5b828204905092915050565b600061354b8261289a565b91506135568361289a565b925082820390508181111561356e5761356d61317b565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006135d0602b83612781565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061363c601583612781565b915061364782613606565b602082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006136a8601483612781565b91506136b382613672565b602082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000613714601783612781565b915061371f826136de565b602082019050919050565b6000602082019050818103600083015261374381613707565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000613780601a83612781565b915061378b8261374a565b602082019050919050565b600060208201905081810360008301526137af81613773565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006137ec601d83612781565b91506137f7826137b6565b602082019050919050565b6000602082019050818103600083015261381b816137df565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000613858601e83612781565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006138c4601583612781565b91506138cf8261388e565b602082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613915565b61395c8683613915565b95508019841693508086168417925050509392505050565b6000819050919050565b600061399961399461398f8461289a565b613974565b61289a565b9050919050565b6000819050919050565b6139b38361397e565b6139c76139bf826139a0565b848454613922565b825550505050565b600090565b6139dc6139cf565b6139e78184846139aa565b505050565b5b81811015613a0b57613a006000826139d4565b6001810190506139ed565b5050565b601f821115613a5057613a218161324f565b613a2a84613905565b81016020851015613a39578190505b613a4d613a4585613905565b8301826139ec565b50505b505050565b600082821c905092915050565b6000613a7360001984600802613a55565b1980831691505092915050565b6000613a8c8383613a62565b9150826002028217905092915050565b613aa683836138fa565b67ffffffffffffffff811115613abf57613abe613371565b5b613ac9825461304c565b613ad4828285613a0f565b6000601f831160018114613b035760008415613af1578287013590505b613afb8582613a80565b865550613b63565b601f198416613b118661324f565b60005b82811015613b3957848901358255600182019150602085019450602081019050613b14565b86831015613b565784890135613b52601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b6000606082019050613b816000830186612982565b613b8e6020830185612973565b613b9b6040830184612973565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613c0457613bd581613bae565b613bde84613905565b81016020851015613bed578190505b613c01613bf985613905565b8301826139ec565b50505b505050565b613c138383613ba3565b67ffffffffffffffff811115613c2c57613c2b613371565b5b613c36825461304c565b613c41828285613bc3565b6000601f831160018114613c705760008415613c5e578287013590505b613c688582613a80565b865550613cd0565b601f198416613c7e86613bae565b60005b82811015613ca657848901358255600182019150602085019450602081019050613c81565b86831015613cc35784890135613cbf601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b60006040820190508181036000830152613cf381856127cd565b90508181036020830152613d0781846127cd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613d46601883612781565b9150613d5182613d10565b602082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea2646970667358221220c31aa2a3285499561a32c4c16bbeeb18312318a3d80052b9d3a9bfc7b6ada64064736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b6040516101519190612806565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906128d0565b610630565b60405161018e919061292b565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612946565b610653565b6040516101ce9493929190612991565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f991906129dd565b60405180910390f35b34801561020e57600080fd5b50610217610751565b60405161022491906129dd565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612946565b610757565b604051610261919061292b565b60405180910390f35b34801561027657600080fd5b5061027f61127d565b60405161028c91906129dd565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b791906129f8565b611287565b6040516102c9919061292b565b60405180910390f35b3480156102de57600080fd5b506102e76112b6565b6040516102f49190612a67565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612aae565b6112bf565b005b34801561033257600080fd5b5061034d60048036038101906103489190612946565b6112ea565b60405161035a9190612b01565b60405180910390f35b34801561036f57600080fd5b5061037861131d565b60405161038591906129dd565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b1c565b611323565b6040516103c291906129dd565b60405180910390f35b6103e560048036038101906103e09190612bd0565b61136b565b6040516103f291906129dd565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ca8565b6118ed565b60405161042f919061292b565b60405180910390f35b34801561044457600080fd5b5061044d611978565b60405161045a9190612806565b60405180910390f35b34801561046f57600080fd5b5061048a60048036038101906104859190612b1c565b611a0a565b604051610497919061292b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612946565b611a2a565b6040516104de9b9a99989796959493929190612e72565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906128d0565b611c16565b60405161051b919061292b565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612f27565b611c39565b60405161055891906129dd565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612fbd565b611cc0565b60405161059591906129dd565b60405180910390f35b6060600380546105ad9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546105d99061304c565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611dd4565b9050610648818585611ddc565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c89061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546106f49061304c565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600d015442116107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906130ef565b60405180910390fd5b6000151582600e0160009054906101000a900460ff16151514610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061315b565b60405180910390fd5b600080600080600090505b85600401548110156108a45785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108845781600201548461087d91906131aa565b9350610897565b81600201548361089491906131aa565b92505b8080600101915050610833565b50846005016001016000600281106108bf576108be6131de565b5b01546108c961127d565b6108d3919061320d565b82846108df91906131aa565b866005016001016001600281106108f9576108f86131de565b5b0154610905919061320d565b11610b445760005b8560040154811015610970578560030160008281526020019081526020016000209150610963308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611dee565b808060010191505061090d565b5084600e0160029054906101000a900460ff1615610add578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b81526004016109f19594939291906132e8565b600060405180830381600087803b158015610a0b57600080fd5b505af1925050508015610a1c575060015b610a9d57610a2861334f565b806308c379a003610a8c5750610a3c6133d1565b80610a475750610a8e565b610a866040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50610a98565b505b3d6000803e3d6000fd5b610adc565b610adb6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187600080604051610b2e93929190613461565b60405180910390a1600095505050505050611278565b84600501600301600060028110610b5e57610b5d6131de565b5b01548284610b6c91906131aa565b610b76919061320d565b85600501600301600160028110610b9057610b8f6131de565b5b015484610b9d919061320d565b10159550858015610c1c5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610d2a578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610c5d90613498565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d9793929190613461565b60405180910390a1600086610dac5782610dae565b835b9050600087610dbd5784610dbf565b835b9050600080600090505b8860040154811015610fee57886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610e11578960050160050154610e14565b60645b90508560010160009054906101000a900460ff1615158b151503610efa5760008660030160149054906101000a900460ff1680610e6257508a60050160060160009054906101000a900460ff165b9050600081610e72576000610ea5565b606483610e7f919061350f565b87878a60020154610e90919061320d565b610e9a919061350f565b610ea4919061320d565b5b9050610ee5308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610ee091906131aa565b611dee565b8085610ef191906131aa565b94505050610fe0565b8560030160149054906101000a900460ff16610fdf5760006064826064610f219190613540565b8860020154610f30919061320d565b610f3a919061350f565b90506000811115610f7557610f74308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b8a60050160060160009054906101000a900460ff16610fcf57600060648c600501600501548960020154610fa9919061320d565b610fb3919061350f565b9050610fbf3082612148565b8085610fcb91906131aa565b9450505b8084610fdb91906131aa565b9350505b5b508080600101915050610dc9565b5060008183610ffd9190613540565b9050600081111561103857611037308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b60005b6006548110156111015760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061108761127d565b61109083611323565b8d600c015461109f919061320d565b6110a9919061350f565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f1573d6000803e3d6000fd5b505050808060010191505061103b565b5088600e0160029054906101000a900460ff161561126e578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b81526004016111829594939291906132e8565b600060405180830381600087803b15801561119c57600080fd5b505af19250505080156111ad575060015b61122e576111b961334f565b806308c379a00361121d57506111cd6133d1565b806111d8575061121f565b6112176040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50611229565b505b3d6000803e3d6000fd5b61126d565b61126c6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b5050505050505050505b919050565b6000600254905090565b600080611292611dd4565b905061129f8582856121ca565b6112aa85858561225e565b60019150509392505050565b60006009905090565b60006008600085815260200190815260200160002090506112e4813385856000612352565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906135e6565b60405180910390fd5b60018910156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613652565b60405180910390fd5b651cae8c13e00089111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906136be565b60405180910390fd5b876001600281106114505761144f6131de565b5b6020020135600c60006002811061146a576114696131de565b5b0154611476919061320d565b8860006002811061148a576114896131de565b5b6020020135600c6001600281106114a4576114a36131de565b5b01546114b0919061320d565b10156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061372a565b60405180910390fd5b87600160028110611505576115046131de565b5b60200201358860006002811061151e5761151d6131de565b5b60200201351115611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613796565b60405180910390fd5b86600160028110611578576115776131de565b5b602002013587600060028110611591576115906131de565b5b602002013511156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613802565b60405180910390fd5b606486111561161b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116129061386e565b60405180910390fd5b6000600a60008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906138da565b60405180910390fd5b600960008154809291906116d890613498565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261176092919061270f565b50888160050160030190600261177792919061270f565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426117bb91906131aa565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826117fb929190613a9c565b5061182a8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612470565b611868818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234611860919061350f565b600180612352565b6118a7818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461189e919061350f565b60006001612352565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118d691906129dd565b60405180910390a150509998505050505050505050565b60006118f98484611c16565b90508015611971578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161193e93929190613b6c565b600060405180830381600087803b15801561195857600080fd5b505af115801561196c573d6000803e3d6000fd5b505050505b9392505050565b6060600480546119879061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119b39061304c565b8015611a005780601f106119d557610100808354040283529160200191611a00565b820191906000526020600020905b8154815290600101906020018083116119e357829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611acb576020028201915b815481526020019060010190808311611ab7575b5050505050815260200160038201600280602002604051908101604052809291908260028015611b10576020028201915b815481526020019060010190808311611afc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611b939061304c565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf9061304c565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505090508b565b600080611c21611dd4565b9050611c2e81858561225e565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b6000815480929190611cd590613498565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611d94929190613c09565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611dc491906129dd565b60405180910390a1509392505050565b600033905090565b611de983838360016124f2565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e40578060026000828254611e3491906131aa565b92505081905550611f13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ec393929190613b6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f5c5780600260008282540392505081905550611fa9565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200691906129dd565b60405180910390a3505050565b6120ab8282604051602401612029929190613cd9565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b5050565b612145816040516024016120c39190612806565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ba5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121b19190612b01565b60405180910390fd5b6121c682600083611dee565b5050565b60006121d68484611c39565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122585781811015612248578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161223f93929190613b6c565b60405180910390fd5b612257848484840360006124f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122c79190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123425760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123399190612b01565b60405180910390fd5b61234d838383611dee565b505050565b84600d0154421115612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613d5c565b60405180910390fd5b6123a4843085611dee565b60008560040160008154809291906123bb90613498565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016124d99190612b01565b60405180910390fd5b6124ee60008383611dee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125645760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161255b9190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d65760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125cd9190612b01565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156126c3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516126ba91906129dd565b60405180910390a35b50505050565b6126e0816126d86126e3612704565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b61274f819050919050565b826002810192821561273e579160200282015b8281111561273d578235825591602001919060010190612722565b5b50905061274b9190612759565b5090565b612757613d7c565b565b5b8082111561277257600081600090555060010161275a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b0578082015181840152602081019050612795565b60008484015250505050565b6000601f19601f8301169050919050565b60006127d882612776565b6127e28185612781565b93506127f2818560208601612792565b6127fb816127bc565b840191505092915050565b6000602082019050818103600083015261282081846127cd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128678261283c565b9050919050565b6128778161285c565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000819050919050565b6128ad8161289a565b81146128b857600080fd5b50565b6000813590506128ca816128a4565b92915050565b600080604083850312156128e7576128e6612832565b5b60006128f585828601612885565b9250506020612906858286016128bb565b9150509250929050565b60008115159050919050565b61292581612910565b82525050565b6000602082019050612940600083018461291c565b92915050565b60006020828403121561295c5761295b612832565b5b600061296a848285016128bb565b91505092915050565b61297c8161289a565b82525050565b61298b8161285c565b82525050565b60006080820190506129a66000830187612973565b6129b36020830186612982565b6129c06040830185612982565b81810360608301526129d281846127cd565b905095945050505050565b60006020820190506129f26000830184612973565b92915050565b600080600060608486031215612a1157612a10612832565b5b6000612a1f86828701612885565b9350506020612a3086828701612885565b9250506040612a41868287016128bb565b9150509250925092565b600060ff82169050919050565b612a6181612a4b565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b612a8b81612910565b8114612a9657600080fd5b50565b600081359050612aa881612a82565b92915050565b600080600060608486031215612ac757612ac6612832565b5b6000612ad5868287016128bb565b9350506020612ae6868287016128bb565b9250506040612af786828701612a99565b9150509250925092565b6000602082019050612b166000830184612982565b92915050565b600060208284031215612b3257612b31612832565b5b6000612b4084828501612885565b91505092915050565b600080fd5b600081905082602060020282011115612b6a57612b69612b49565b5b92915050565b600080fd5b600080fd5b60008083601f840112612b9057612b8f612b70565b5b8235905067ffffffffffffffff811115612bad57612bac612b75565b5b602083019150836001820283011115612bc957612bc8612b49565b5b9250929050565b60008060008060008060008060006101408a8c031215612bf357612bf2612832565b5b6000612c018c828d016128bb565b9950506020612c128c828d016128bb565b9850506040612c238c828d01612b4e565b9750506080612c348c828d01612b4e565b96505060c0612c458c828d016128bb565b95505060e0612c568c828d01612a99565b945050610100612c688c828d01612a99565b9350506101208a013567ffffffffffffffff811115612c8a57612c89612837565b5b612c968c828d01612b7a565b92509250509295985092959850929598565b600080600060608486031215612cc157612cc0612832565b5b6000612ccf86828701612885565b9350506020612ce0868287016128bb565b9250506040612cf1868287016128bb565b9150509250925092565b612d048161289a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612d368383612cfb565b60208301905092915050565b6000602082019050919050565b612d5881612d0a565b612d628184612d15565b9250612d6d82612d20565b8060005b83811015612d9e578151612d858782612d2a565b9650612d9083612d42565b925050600181019050612d71565b505050505050565b612daf81612910565b82525050565b60e082016000820151612dcb6000850182612cfb565b506020820151612dde6020850182612d4f565b506040820151612df16060850182612d4f565b506060820151612e0460a0850182612cfb565b506080820151612e1760c0850182612da6565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612e4482612e1d565b612e4e8185612e28565b9350612e5e818560208601612792565b612e67816127bc565b840191505092915050565b600061022082019050612e88600083018e612973565b612e95602083018d612973565b612ea2604083018c612982565b612eaf606083018b612973565b612ebc608083018a612db5565b612eca610160830189612973565b612ed8610180830188612973565b612ee66101a083018761291c565b612ef46101c083018661291c565b612f026101e083018561291c565b818103610200830152612f158184612e39565b90509c9b505050505050505050505050565b60008060408385031215612f3e57612f3d612832565b5b6000612f4c85828601612885565b9250506020612f5d85828601612885565b9150509250929050565b60008083601f840112612f7d57612f7c612b70565b5b8235905067ffffffffffffffff811115612f9a57612f99612b75565b5b602083019150836001820283011115612fb657612fb5612b49565b5b9250929050565b600080600060408486031215612fd657612fd5612832565b5b6000612fe486828701612885565b935050602084013567ffffffffffffffff81111561300557613004612837565b5b61301186828701612f67565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306457607f821691505b6020821081036130775761307661301d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006130d9602183612781565b91506130e48261307d565b604082019050919050565b60006020820190508181036000830152613108816130cc565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613145601883612781565b91506131508261310f565b602082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b58261289a565b91506131c08361289a565b92508282019050808211156131d8576131d761317b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132188261289a565b91506132238361289a565b92508282026132318161289a565b915082820484148315176132485761324761317b565b5b5092915050565b60008190508160005260206000209050919050565b600081546132718161304c565b61327b8186612e28565b9450600182166000811461329657600181146132ac576132df565b60ff1983168652811515602002860193506132df565b6132b58561324f565b60005b838110156132d7578154818901526001820191506020810190506132b8565b808801955050505b50505092915050565b600060a0820190506132fd600083018861291c565b61330a602083018761291c565b6133176040830186612973565b6133246060830185612973565b81810360808301526133368184613264565b90509695505050505050565b60008160e01c9050919050565b600060033d111561336e5760046000803e61336b600051613342565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133a9826127bc565b810181811067ffffffffffffffff821117156133c8576133c7613371565b5b80604052505050565b600060443d1061345e576133e3612828565b60043d036004823e80513d602482011167ffffffffffffffff8211171561340b57505061345e565b808201805167ffffffffffffffff811115613429575050505061345e565b80602083010160043d03850181111561344657505050505061345e565b613455826020018501866133a0565b82955050505050505b90565b60006060820190506134766000830186612973565b613483602083018561291c565b613490604083018461291c565b949350505050565b60006134a38261289a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d5576134d461317b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351a8261289a565b91506135258361289a565b925082613535576135346134e0565b5b828204905092915050565b600061354b8261289a565b91506135568361289a565b925082820390508181111561356e5761356d61317b565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006135d0602b83612781565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061363c601583612781565b915061364782613606565b602082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006136a8601483612781565b91506136b382613672565b602082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000613714601783612781565b915061371f826136de565b602082019050919050565b6000602082019050818103600083015261374381613707565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000613780601a83612781565b915061378b8261374a565b602082019050919050565b600060208201905081810360008301526137af81613773565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006137ec601d83612781565b91506137f7826137b6565b602082019050919050565b6000602082019050818103600083015261381b816137df565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000613858601e83612781565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006138c4601583612781565b91506138cf8261388e565b602082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613915565b61395c8683613915565b95508019841693508086168417925050509392505050565b6000819050919050565b600061399961399461398f8461289a565b613974565b61289a565b9050919050565b6000819050919050565b6139b38361397e565b6139c76139bf826139a0565b848454613922565b825550505050565b600090565b6139dc6139cf565b6139e78184846139aa565b505050565b5b81811015613a0b57613a006000826139d4565b6001810190506139ed565b5050565b601f821115613a5057613a218161324f565b613a2a84613905565b81016020851015613a39578190505b613a4d613a4585613905565b8301826139ec565b50505b505050565b600082821c905092915050565b6000613a7360001984600802613a55565b1980831691505092915050565b6000613a8c8383613a62565b9150826002028217905092915050565b613aa683836138fa565b67ffffffffffffffff811115613abf57613abe613371565b5b613ac9825461304c565b613ad4828285613a0f565b6000601f831160018114613b035760008415613af1578287013590505b613afb8582613a80565b865550613b63565b601f198416613b118661324f565b60005b82811015613b3957848901358255600182019150602085019450602081019050613b14565b86831015613b565784890135613b52601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b6000606082019050613b816000830186612982565b613b8e6020830185612973565b613b9b6040830184612973565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613c0457613bd581613bae565b613bde84613905565b81016020851015613bed578190505b613c01613bf985613905565b8301826139ec565b50505b505050565b613c138383613ba3565b67ffffffffffffffff811115613c2c57613c2b613371565b5b613c36825461304c565b613c41828285613bc3565b6000601f831160018114613c705760008415613c5e578287013590505b613c688582613a80565b865550613cd0565b601f198416613c7e86613bae565b60005b82811015613ca657848901358255600182019150602085019450602081019050613c81565b86831015613cc35784890135613cbf601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b60006040820190508181036000830152613cf381856127cd565b90508181036020830152613d0781846127cd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613d46601883612781565b9150613d5182613d10565b602082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea2646970667358221220c31aa2a3285499561a32c4c16bbeeb18312318a3d80052b9d3a9bfc7b6ada64064736f6c63430008180033", + "bytecode": "0x60806040526040518060400160405280600160ff168152602001600a60ff16815250600c90600262000033929190620000da565b503480156200004157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000bf9190620003bd565b508060049081620000d19190620003bd565b505050620004a4565b826002810192821562000111579160200282015b8281111562000110578251829060ff16905591602001919060010190620000ee565b5b50905062000120919062000124565b5090565b5b808211156200013f57600081600090555060010162000125565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001c557607f821691505b602082108103620001db57620001da6200017d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000206565b62000251868362000206565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200029e62000298620002928462000269565b62000273565b62000269565b9050919050565b6000819050919050565b620002ba836200027d565b620002d2620002c982620002a5565b84845462000213565b825550505050565b600090565b620002e9620002da565b620002f6818484620002af565b505050565b5b818110156200031e5762000312600082620002df565b600181019050620002fc565b5050565b601f8211156200036d576200033781620001e1565b6200034284620001f6565b8101602085101562000352578190505b6200036a6200036185620001f6565b830182620002fb565b50505b505050565b600082821c905092915050565b6000620003926000198460080262000372565b1980831691505092915050565b6000620003ad83836200037f565b9150826002028217905092915050565b620003c88262000143565b67ffffffffffffffff811115620003e457620003e36200014e565b5b620003f08254620001ac565b620003fd82828562000322565b600060209050601f83116001811462000435576000841562000420578287015190505b6200042c85826200039f565b8655506200049c565b601f1984166200044586620001e1565b60005b828110156200046f5784890151825560018201915060208501945060208101905062000448565b868310156200048f57848901516200048b601f8916826200037f565b8355505b6001600288020188555050505b505050505050565b613de180620004b46000396000f3fe60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b6040516101519190612806565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906128d0565b610630565b60405161018e919061292b565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612946565b610653565b6040516101ce9493929190612991565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f991906129dd565b60405180910390f35b34801561020e57600080fd5b50610217610751565b60405161022491906129dd565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612946565b610757565b604051610261919061292b565b60405180910390f35b34801561027657600080fd5b5061027f61127d565b60405161028c91906129dd565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b791906129f8565b611287565b6040516102c9919061292b565b60405180910390f35b3480156102de57600080fd5b506102e76112b6565b6040516102f49190612a67565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612aae565b6112bf565b005b34801561033257600080fd5b5061034d60048036038101906103489190612946565b6112ea565b60405161035a9190612b01565b60405180910390f35b34801561036f57600080fd5b5061037861131d565b60405161038591906129dd565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b1c565b611323565b6040516103c291906129dd565b60405180910390f35b6103e560048036038101906103e09190612bd0565b61136b565b6040516103f291906129dd565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ca8565b6118ed565b60405161042f919061292b565b60405180910390f35b34801561044457600080fd5b5061044d611978565b60405161045a9190612806565b60405180910390f35b34801561046f57600080fd5b5061048a60048036038101906104859190612b1c565b611a0a565b604051610497919061292b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612946565b611a2a565b6040516104de9b9a99989796959493929190612e72565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906128d0565b611c16565b60405161051b919061292b565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612f27565b611c39565b60405161055891906129dd565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612fbd565b611cc0565b60405161059591906129dd565b60405180910390f35b6060600380546105ad9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546105d99061304c565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611dd4565b9050610648818585611ddc565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c89061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546106f49061304c565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600d015442116107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906130ef565b60405180910390fd5b6000151582600e0160009054906101000a900460ff16151514610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061315b565b60405180910390fd5b600080600080600090505b85600401548110156108a45785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108845781600201548461087d91906131aa565b9350610897565b81600201548361089491906131aa565b92505b8080600101915050610833565b50846005016001016000600281106108bf576108be6131de565b5b01546108c961127d565b6108d3919061320d565b82846108df91906131aa565b866005016001016001600281106108f9576108f86131de565b5b0154610905919061320d565b11610b445760005b8560040154811015610970578560030160008281526020019081526020016000209150610963308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611dee565b808060010191505061090d565b50600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109c29392919061324f565b60405180910390a184600e0160029054906101000a900460ff1615610b36578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b8152600401610a4a95949392919061331f565b600060405180830381600087803b158015610a6457600080fd5b505af1925050508015610a75575060015b610af657610a81613386565b806308c379a003610ae55750610a95613408565b80610aa05750610ae7565b610adf6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50610af1565b505b3d6000803e3d6000fd5b610b35565b610b346040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b600095505050505050611278565b84600501600301600060028110610b5e57610b5d6131de565b5b01548284610b6c91906131aa565b610b76919061320d565b85600501600301600160028110610b9057610b8f6131de565b5b015484610b9d919061320d565b10159550858015610c1c5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610d2a578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610c5d90613498565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d979392919061324f565b60405180910390a1600086610dac5782610dae565b835b9050600087610dbd5784610dbf565b835b9050600080600090505b8860040154811015610fee57886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610e11578960050160050154610e14565b60645b90508560010160009054906101000a900460ff1615158b151503610efa5760008660030160149054906101000a900460ff1680610e6257508a60050160060160009054906101000a900460ff165b9050600081610e72576000610ea5565b606483610e7f919061350f565b87878a60020154610e90919061320d565b610e9a919061350f565b610ea4919061320d565b5b9050610ee5308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610ee091906131aa565b611dee565b8085610ef191906131aa565b94505050610fe0565b8560030160149054906101000a900460ff16610fdf5760006064826064610f219190613540565b8860020154610f30919061320d565b610f3a919061350f565b90506000811115610f7557610f74308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b8a60050160060160009054906101000a900460ff16610fcf57600060648c600501600501548960020154610fa9919061320d565b610fb3919061350f565b9050610fbf3082612148565b8085610fcb91906131aa565b9450505b8084610fdb91906131aa565b9350505b5b508080600101915050610dc9565b5060008183610ffd9190613540565b9050600081111561103857611037308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b60005b6006548110156111015760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061108761127d565b61109083611323565b8d600c015461109f919061320d565b6110a9919061350f565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f1573d6000803e3d6000fd5b505050808060010191505061103b565b5088600e0160029054906101000a900460ff161561126e578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b815260040161118295949392919061331f565b600060405180830381600087803b15801561119c57600080fd5b505af19250505080156111ad575060015b61122e576111b9613386565b806308c379a00361121d57506111cd613408565b806111d8575061121f565b6112176040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50611229565b505b3d6000803e3d6000fd5b61126d565b61126c6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b5050505050505050505b919050565b6000600254905090565b600080611292611dd4565b905061129f8582856121ca565b6112aa85858561225e565b60019150509392505050565b60006009905090565b60006008600085815260200190815260200160002090506112e4813385856000612352565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906135e6565b60405180910390fd5b60018910156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613652565b60405180910390fd5b651cae8c13e00089111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906136be565b60405180910390fd5b876001600281106114505761144f6131de565b5b6020020135600c60006002811061146a576114696131de565b5b0154611476919061320d565b8860006002811061148a576114896131de565b5b6020020135600c6001600281106114a4576114a36131de565b5b01546114b0919061320d565b10156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061372a565b60405180910390fd5b87600160028110611505576115046131de565b5b60200201358860006002811061151e5761151d6131de565b5b60200201351115611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613796565b60405180910390fd5b86600160028110611578576115776131de565b5b602002013587600060028110611591576115906131de565b5b602002013511156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613802565b60405180910390fd5b606486111561161b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116129061386e565b60405180910390fd5b6000600a60008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906138da565b60405180910390fd5b600960008154809291906116d890613498565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261176092919061270f565b50888160050160030190600261177792919061270f565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426117bb91906131aa565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826117fb929190613a9c565b5061182a8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612470565b611868818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234611860919061350f565b600180612352565b6118a7818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461189e919061350f565b60006001612352565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118d691906129dd565b60405180910390a150509998505050505050505050565b60006118f98484611c16565b90508015611971578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161193e93929190613b6c565b600060405180830381600087803b15801561195857600080fd5b505af115801561196c573d6000803e3d6000fd5b505050505b9392505050565b6060600480546119879061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119b39061304c565b8015611a005780601f106119d557610100808354040283529160200191611a00565b820191906000526020600020905b8154815290600101906020018083116119e357829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611acb576020028201915b815481526020019060010190808311611ab7575b5050505050815260200160038201600280602002604051908101604052809291908260028015611b10576020028201915b815481526020019060010190808311611afc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611b939061304c565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf9061304c565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505090508b565b600080611c21611dd4565b9050611c2e81858561225e565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b6000815480929190611cd590613498565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611d94929190613c09565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611dc491906129dd565b60405180910390a1509392505050565b600033905090565b611de983838360016124f2565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e40578060026000828254611e3491906131aa565b92505081905550611f13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ec393929190613b6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f5c5780600260008282540392505081905550611fa9565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200691906129dd565b60405180910390a3505050565b6120ab8282604051602401612029929190613cd9565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b5050565b612145816040516024016120c39190612806565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ba5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121b19190612b01565b60405180910390fd5b6121c682600083611dee565b5050565b60006121d68484611c39565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122585781811015612248578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161223f93929190613b6c565b60405180910390fd5b612257848484840360006124f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122c79190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123425760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123399190612b01565b60405180910390fd5b61234d838383611dee565b505050565b84600d0154421115612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613d5c565b60405180910390fd5b6123a4843085611dee565b60008560040160008154809291906123bb90613498565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016124d99190612b01565b60405180910390fd5b6124ee60008383611dee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125645760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161255b9190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d65760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125cd9190612b01565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156126c3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516126ba91906129dd565b60405180910390a35b50505050565b6126e0816126d86126e3612704565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b61274f819050919050565b826002810192821561273e579160200282015b8281111561273d578235825591602001919060010190612722565b5b50905061274b9190612759565b5090565b612757613d7c565b565b5b8082111561277257600081600090555060010161275a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b0578082015181840152602081019050612795565b60008484015250505050565b6000601f19601f8301169050919050565b60006127d882612776565b6127e28185612781565b93506127f2818560208601612792565b6127fb816127bc565b840191505092915050565b6000602082019050818103600083015261282081846127cd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128678261283c565b9050919050565b6128778161285c565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000819050919050565b6128ad8161289a565b81146128b857600080fd5b50565b6000813590506128ca816128a4565b92915050565b600080604083850312156128e7576128e6612832565b5b60006128f585828601612885565b9250506020612906858286016128bb565b9150509250929050565b60008115159050919050565b61292581612910565b82525050565b6000602082019050612940600083018461291c565b92915050565b60006020828403121561295c5761295b612832565b5b600061296a848285016128bb565b91505092915050565b61297c8161289a565b82525050565b61298b8161285c565b82525050565b60006080820190506129a66000830187612973565b6129b36020830186612982565b6129c06040830185612982565b81810360608301526129d281846127cd565b905095945050505050565b60006020820190506129f26000830184612973565b92915050565b600080600060608486031215612a1157612a10612832565b5b6000612a1f86828701612885565b9350506020612a3086828701612885565b9250506040612a41868287016128bb565b9150509250925092565b600060ff82169050919050565b612a6181612a4b565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b612a8b81612910565b8114612a9657600080fd5b50565b600081359050612aa881612a82565b92915050565b600080600060608486031215612ac757612ac6612832565b5b6000612ad5868287016128bb565b9350506020612ae6868287016128bb565b9250506040612af786828701612a99565b9150509250925092565b6000602082019050612b166000830184612982565b92915050565b600060208284031215612b3257612b31612832565b5b6000612b4084828501612885565b91505092915050565b600080fd5b600081905082602060020282011115612b6a57612b69612b49565b5b92915050565b600080fd5b600080fd5b60008083601f840112612b9057612b8f612b70565b5b8235905067ffffffffffffffff811115612bad57612bac612b75565b5b602083019150836001820283011115612bc957612bc8612b49565b5b9250929050565b60008060008060008060008060006101408a8c031215612bf357612bf2612832565b5b6000612c018c828d016128bb565b9950506020612c128c828d016128bb565b9850506040612c238c828d01612b4e565b9750506080612c348c828d01612b4e565b96505060c0612c458c828d016128bb565b95505060e0612c568c828d01612a99565b945050610100612c688c828d01612a99565b9350506101208a013567ffffffffffffffff811115612c8a57612c89612837565b5b612c968c828d01612b7a565b92509250509295985092959850929598565b600080600060608486031215612cc157612cc0612832565b5b6000612ccf86828701612885565b9350506020612ce0868287016128bb565b9250506040612cf1868287016128bb565b9150509250925092565b612d048161289a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612d368383612cfb565b60208301905092915050565b6000602082019050919050565b612d5881612d0a565b612d628184612d15565b9250612d6d82612d20565b8060005b83811015612d9e578151612d858782612d2a565b9650612d9083612d42565b925050600181019050612d71565b505050505050565b612daf81612910565b82525050565b60e082016000820151612dcb6000850182612cfb565b506020820151612dde6020850182612d4f565b506040820151612df16060850182612d4f565b506060820151612e0460a0850182612cfb565b506080820151612e1760c0850182612da6565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612e4482612e1d565b612e4e8185612e28565b9350612e5e818560208601612792565b612e67816127bc565b840191505092915050565b600061022082019050612e88600083018e612973565b612e95602083018d612973565b612ea2604083018c612982565b612eaf606083018b612973565b612ebc608083018a612db5565b612eca610160830189612973565b612ed8610180830188612973565b612ee66101a083018761291c565b612ef46101c083018661291c565b612f026101e083018561291c565b818103610200830152612f158184612e39565b90509c9b505050505050505050505050565b60008060408385031215612f3e57612f3d612832565b5b6000612f4c85828601612885565b9250506020612f5d85828601612885565b9150509250929050565b60008083601f840112612f7d57612f7c612b70565b5b8235905067ffffffffffffffff811115612f9a57612f99612b75565b5b602083019150836001820283011115612fb657612fb5612b49565b5b9250929050565b600080600060408486031215612fd657612fd5612832565b5b6000612fe486828701612885565b935050602084013567ffffffffffffffff81111561300557613004612837565b5b61301186828701612f67565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306457607f821691505b6020821081036130775761307661301d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006130d9602183612781565b91506130e48261307d565b604082019050919050565b60006020820190508181036000830152613108816130cc565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613145601883612781565b91506131508261310f565b602082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b58261289a565b91506131c08361289a565b92508282019050808211156131d8576131d761317b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132188261289a565b91506132238361289a565b92508282026132318161289a565b915082820484148315176132485761324761317b565b5b5092915050565b60006060820190506132646000830186612973565b613271602083018561291c565b61327e604083018461291c565b949350505050565b60008190508160005260206000209050919050565b600081546132a88161304c565b6132b28186612e28565b945060018216600081146132cd57600181146132e357613316565b60ff198316865281151560200286019350613316565b6132ec85613286565b60005b8381101561330e578154818901526001820191506020810190506132ef565b808801955050505b50505092915050565b600060a082019050613334600083018861291c565b613341602083018761291c565b61334e6040830186612973565b61335b6060830185612973565b818103608083015261336d818461329b565b90509695505050505050565b60008160e01c9050919050565b600060033d11156133a55760046000803e6133a2600051613379565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133e0826127bc565b810181811067ffffffffffffffff821117156133ff576133fe6133a8565b5b80604052505050565b600060443d106134955761341a612828565b60043d036004823e80513d602482011167ffffffffffffffff82111715613442575050613495565b808201805167ffffffffffffffff8111156134605750505050613495565b80602083010160043d03850181111561347d575050505050613495565b61348c826020018501866133d7565b82955050505050505b90565b60006134a38261289a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d5576134d461317b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351a8261289a565b91506135258361289a565b925082613535576135346134e0565b5b828204905092915050565b600061354b8261289a565b91506135568361289a565b925082820390508181111561356e5761356d61317b565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006135d0602b83612781565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061363c601583612781565b915061364782613606565b602082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006136a8601483612781565b91506136b382613672565b602082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000613714601783612781565b915061371f826136de565b602082019050919050565b6000602082019050818103600083015261374381613707565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000613780601a83612781565b915061378b8261374a565b602082019050919050565b600060208201905081810360008301526137af81613773565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006137ec601d83612781565b91506137f7826137b6565b602082019050919050565b6000602082019050818103600083015261381b816137df565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000613858601e83612781565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006138c4601583612781565b91506138cf8261388e565b602082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613915565b61395c8683613915565b95508019841693508086168417925050509392505050565b6000819050919050565b600061399961399461398f8461289a565b613974565b61289a565b9050919050565b6000819050919050565b6139b38361397e565b6139c76139bf826139a0565b848454613922565b825550505050565b600090565b6139dc6139cf565b6139e78184846139aa565b505050565b5b81811015613a0b57613a006000826139d4565b6001810190506139ed565b5050565b601f821115613a5057613a2181613286565b613a2a84613905565b81016020851015613a39578190505b613a4d613a4585613905565b8301826139ec565b50505b505050565b600082821c905092915050565b6000613a7360001984600802613a55565b1980831691505092915050565b6000613a8c8383613a62565b9150826002028217905092915050565b613aa683836138fa565b67ffffffffffffffff811115613abf57613abe6133a8565b5b613ac9825461304c565b613ad4828285613a0f565b6000601f831160018114613b035760008415613af1578287013590505b613afb8582613a80565b865550613b63565b601f198416613b1186613286565b60005b82811015613b3957848901358255600182019150602085019450602081019050613b14565b86831015613b565784890135613b52601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b6000606082019050613b816000830186612982565b613b8e6020830185612973565b613b9b6040830184612973565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613c0457613bd581613bae565b613bde84613905565b81016020851015613bed578190505b613c01613bf985613905565b8301826139ec565b50505b505050565b613c138383613ba3565b67ffffffffffffffff811115613c2c57613c2b6133a8565b5b613c36825461304c565b613c41828285613bc3565b6000601f831160018114613c705760008415613c5e578287013590505b613c688582613a80565b865550613cd0565b601f198416613c7e86613bae565b60005b82811015613ca657848901358255600182019150602085019450602081019050613c81565b86831015613cc35784890135613cbf601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b60006040820190508181036000830152613cf381856127cd565b90508181036020830152613d0781846127cd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613d46601883612781565b9150613d5182613d10565b602082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea26469706673582212205fbb53553281f45b822d687ded23574e963223a2a01d508bb51d82875c44f00464736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b6040516101519190612806565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906128d0565b610630565b60405161018e919061292b565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612946565b610653565b6040516101ce9493929190612991565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f991906129dd565b60405180910390f35b34801561020e57600080fd5b50610217610751565b60405161022491906129dd565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612946565b610757565b604051610261919061292b565b60405180910390f35b34801561027657600080fd5b5061027f61127d565b60405161028c91906129dd565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b791906129f8565b611287565b6040516102c9919061292b565b60405180910390f35b3480156102de57600080fd5b506102e76112b6565b6040516102f49190612a67565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612aae565b6112bf565b005b34801561033257600080fd5b5061034d60048036038101906103489190612946565b6112ea565b60405161035a9190612b01565b60405180910390f35b34801561036f57600080fd5b5061037861131d565b60405161038591906129dd565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b1c565b611323565b6040516103c291906129dd565b60405180910390f35b6103e560048036038101906103e09190612bd0565b61136b565b6040516103f291906129dd565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ca8565b6118ed565b60405161042f919061292b565b60405180910390f35b34801561044457600080fd5b5061044d611978565b60405161045a9190612806565b60405180910390f35b34801561046f57600080fd5b5061048a60048036038101906104859190612b1c565b611a0a565b604051610497919061292b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612946565b611a2a565b6040516104de9b9a99989796959493929190612e72565b60405180910390f35b3480156104f357600080fd5b5061050e600480360381019061050991906128d0565b611c16565b60405161051b919061292b565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612f27565b611c39565b60405161055891906129dd565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612fbd565b611cc0565b60405161059591906129dd565b60405180910390f35b6060600380546105ad9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546105d99061304c565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611dd4565b9050610648818585611ddc565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c89061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546106f49061304c565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600d015442116107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906130ef565b60405180910390fd5b6000151582600e0160009054906101000a900460ff16151514610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061315b565b60405180910390fd5b600080600080600090505b85600401548110156108a45785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108845781600201548461087d91906131aa565b9350610897565b81600201548361089491906131aa565b92505b8080600101915050610833565b50846005016001016000600281106108bf576108be6131de565b5b01546108c961127d565b6108d3919061320d565b82846108df91906131aa565b866005016001016001600281106108f9576108f86131de565b5b0154610905919061320d565b11610b445760005b8560040154811015610970578560030160008281526020019081526020016000209150610963308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611dee565b808060010191505061090d565b50600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109c29392919061324f565b60405180910390a184600e0160029054906101000a900460ff1615610b36578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b8152600401610a4a95949392919061331f565b600060405180830381600087803b158015610a6457600080fd5b505af1925050508015610a75575060015b610af657610a81613386565b806308c379a003610ae55750610a95613408565b80610aa05750610ae7565b610adf6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50610af1565b505b3d6000803e3d6000fd5b610b35565b610b346040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b600095505050505050611278565b84600501600301600060028110610b5e57610b5d6131de565b5b01548284610b6c91906131aa565b610b76919061320d565b85600501600301600160028110610b9057610b8f6131de565b5b015484610b9d919061320d565b10159550858015610c1c5750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610d2a578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610c5d90613498565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d979392919061324f565b60405180910390a1600086610dac5782610dae565b835b9050600087610dbd5784610dbf565b835b9050600080600090505b8860040154811015610fee57886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610e11578960050160050154610e14565b60645b90508560010160009054906101000a900460ff1615158b151503610efa5760008660030160149054906101000a900460ff1680610e6257508a60050160060160009054906101000a900460ff165b9050600081610e72576000610ea5565b606483610e7f919061350f565b87878a60020154610e90919061320d565b610e9a919061350f565b610ea4919061320d565b5b9050610ee5308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610ee091906131aa565b611dee565b8085610ef191906131aa565b94505050610fe0565b8560030160149054906101000a900460ff16610fdf5760006064826064610f219190613540565b8860020154610f30919061320d565b610f3a919061350f565b90506000811115610f7557610f74308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b8a60050160060160009054906101000a900460ff16610fcf57600060648c600501600501548960020154610fa9919061320d565b610fb3919061350f565b9050610fbf3082612148565b8085610fcb91906131aa565b9450505b8084610fdb91906131aa565b9350505b5b508080600101915050610dc9565b5060008183610ffd9190613540565b9050600081111561103857611037308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611dee565b5b60005b6006548110156111015760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061108761127d565b61109083611323565b8d600c015461109f919061320d565b6110a9919061350f565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f1573d6000803e3d6000fd5b505050808060010191505061103b565b5088600e0160029054906101000a900460ff161561126e578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b815260040161118295949392919061331f565b600060405180830381600087803b15801561119c57600080fd5b505af19250505080156111ad575060015b61122e576111b9613386565b806308c379a00361121d57506111cd613408565b806111d8575061121f565b6112176040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c6964617465206661696c65643a00000000000081525082612013565b50611229565b505b3d6000803e3d6000fd5b61126d565b61126c6040518060400160405280601a81526020017f63616c6c6261636b4f6e56616c696461746520737563636565640000000000008152506120af565b5b5b5050505050505050505b919050565b6000600254905090565b600080611292611dd4565b905061129f8582856121ca565b6112aa85858561225e565b60019150509392505050565b60006009905090565b60006008600085815260200190815260200160002090506112e4813385856000612352565b50505050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906135e6565b60405180910390fd5b60018910156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613652565b60405180910390fd5b651cae8c13e00089111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906136be565b60405180910390fd5b876001600281106114505761144f6131de565b5b6020020135600c60006002811061146a576114696131de565b5b0154611476919061320d565b8860006002811061148a576114896131de565b5b6020020135600c6001600281106114a4576114a36131de565b5b01546114b0919061320d565b10156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061372a565b60405180910390fd5b87600160028110611505576115046131de565b5b60200201358860006002811061151e5761151d6131de565b5b60200201351115611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613796565b60405180910390fd5b86600160028110611578576115776131de565b5b602002013587600060028110611591576115906131de565b5b602002013511156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613802565b60405180910390fd5b606486111561161b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116129061386e565b60405180910390fd5b6000600a60008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906138da565b60405180910390fd5b600960008154809291906116d890613498565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261176092919061270f565b50888160050160030190600261177792919061270f565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426117bb91906131aa565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826117fb929190613a9c565b5061182a8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612470565b611868818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234611860919061350f565b600180612352565b6118a7818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461189e919061350f565b60006001612352565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118d691906129dd565b60405180910390a150509998505050505050505050565b60006118f98484611c16565b90508015611971578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161193e93929190613b6c565b600060405180830381600087803b15801561195857600080fd5b505af115801561196c573d6000803e3d6000fd5b505050505b9392505050565b6060600480546119879061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119b39061304c565b8015611a005780601f106119d557610100808354040283529160200191611a00565b820191906000526020600020905b8154815290600101906020018083116119e357829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611acb576020028201915b815481526020019060010190808311611ab7575b5050505050815260200160038201600280602002604051908101604052809291908260028015611b10576020028201915b815481526020019060010190808311611afc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611b939061304c565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf9061304c565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505090508b565b600080611c21611dd4565b9050611c2e81858561225e565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b6000815480929190611cd590613498565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611d94929190613c09565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611dc491906129dd565b60405180910390a1509392505050565b600033905090565b611de983838360016124f2565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e40578060026000828254611e3491906131aa565b92505081905550611f13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ec393929190613b6c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f5c5780600260008282540392505081905550611fa9565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200691906129dd565b60405180910390a3505050565b6120ab8282604051602401612029929190613cd9565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b5050565b612145816040516024016120c39190612806565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ba5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121b19190612b01565b60405180910390fd5b6121c682600083611dee565b5050565b60006121d68484611c39565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122585781811015612248578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161223f93929190613b6c565b60405180910390fd5b612257848484840360006124f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122c79190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123425760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123399190612b01565b60405180910390fd5b61234d838383611dee565b505050565b84600d0154421115612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613d5c565b60405180910390fd5b6123a4843085611dee565b60008560040160008154809291906123bb90613498565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e25760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016124d99190612b01565b60405180910390fd5b6124ee60008383611dee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125645760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161255b9190612b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d65760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125cd9190612b01565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156126c3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516126ba91906129dd565b60405180910390a35b50505050565b6126e0816126d86126e3612704565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b61274f819050919050565b826002810192821561273e579160200282015b8281111561273d578235825591602001919060010190612722565b5b50905061274b9190612759565b5090565b612757613d7c565b565b5b8082111561277257600081600090555060010161275a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b0578082015181840152602081019050612795565b60008484015250505050565b6000601f19601f8301169050919050565b60006127d882612776565b6127e28185612781565b93506127f2818560208601612792565b6127fb816127bc565b840191505092915050565b6000602082019050818103600083015261282081846127cd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128678261283c565b9050919050565b6128778161285c565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000819050919050565b6128ad8161289a565b81146128b857600080fd5b50565b6000813590506128ca816128a4565b92915050565b600080604083850312156128e7576128e6612832565b5b60006128f585828601612885565b9250506020612906858286016128bb565b9150509250929050565b60008115159050919050565b61292581612910565b82525050565b6000602082019050612940600083018461291c565b92915050565b60006020828403121561295c5761295b612832565b5b600061296a848285016128bb565b91505092915050565b61297c8161289a565b82525050565b61298b8161285c565b82525050565b60006080820190506129a66000830187612973565b6129b36020830186612982565b6129c06040830185612982565b81810360608301526129d281846127cd565b905095945050505050565b60006020820190506129f26000830184612973565b92915050565b600080600060608486031215612a1157612a10612832565b5b6000612a1f86828701612885565b9350506020612a3086828701612885565b9250506040612a41868287016128bb565b9150509250925092565b600060ff82169050919050565b612a6181612a4b565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b612a8b81612910565b8114612a9657600080fd5b50565b600081359050612aa881612a82565b92915050565b600080600060608486031215612ac757612ac6612832565b5b6000612ad5868287016128bb565b9350506020612ae6868287016128bb565b9250506040612af786828701612a99565b9150509250925092565b6000602082019050612b166000830184612982565b92915050565b600060208284031215612b3257612b31612832565b5b6000612b4084828501612885565b91505092915050565b600080fd5b600081905082602060020282011115612b6a57612b69612b49565b5b92915050565b600080fd5b600080fd5b60008083601f840112612b9057612b8f612b70565b5b8235905067ffffffffffffffff811115612bad57612bac612b75565b5b602083019150836001820283011115612bc957612bc8612b49565b5b9250929050565b60008060008060008060008060006101408a8c031215612bf357612bf2612832565b5b6000612c018c828d016128bb565b9950506020612c128c828d016128bb565b9850506040612c238c828d01612b4e565b9750506080612c348c828d01612b4e565b96505060c0612c458c828d016128bb565b95505060e0612c568c828d01612a99565b945050610100612c688c828d01612a99565b9350506101208a013567ffffffffffffffff811115612c8a57612c89612837565b5b612c968c828d01612b7a565b92509250509295985092959850929598565b600080600060608486031215612cc157612cc0612832565b5b6000612ccf86828701612885565b9350506020612ce0868287016128bb565b9250506040612cf1868287016128bb565b9150509250925092565b612d048161289a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612d368383612cfb565b60208301905092915050565b6000602082019050919050565b612d5881612d0a565b612d628184612d15565b9250612d6d82612d20565b8060005b83811015612d9e578151612d858782612d2a565b9650612d9083612d42565b925050600181019050612d71565b505050505050565b612daf81612910565b82525050565b60e082016000820151612dcb6000850182612cfb565b506020820151612dde6020850182612d4f565b506040820151612df16060850182612d4f565b506060820151612e0460a0850182612cfb565b506080820151612e1760c0850182612da6565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612e4482612e1d565b612e4e8185612e28565b9350612e5e818560208601612792565b612e67816127bc565b840191505092915050565b600061022082019050612e88600083018e612973565b612e95602083018d612973565b612ea2604083018c612982565b612eaf606083018b612973565b612ebc608083018a612db5565b612eca610160830189612973565b612ed8610180830188612973565b612ee66101a083018761291c565b612ef46101c083018661291c565b612f026101e083018561291c565b818103610200830152612f158184612e39565b90509c9b505050505050505050505050565b60008060408385031215612f3e57612f3d612832565b5b6000612f4c85828601612885565b9250506020612f5d85828601612885565b9150509250929050565b60008083601f840112612f7d57612f7c612b70565b5b8235905067ffffffffffffffff811115612f9a57612f99612b75565b5b602083019150836001820283011115612fb657612fb5612b49565b5b9250929050565b600080600060408486031215612fd657612fd5612832565b5b6000612fe486828701612885565b935050602084013567ffffffffffffffff81111561300557613004612837565b5b61301186828701612f67565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306457607f821691505b6020821081036130775761307661301d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006130d9602183612781565b91506130e48261307d565b604082019050919050565b60006020820190508181036000830152613108816130cc565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613145601883612781565b91506131508261310f565b602082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b58261289a565b91506131c08361289a565b92508282019050808211156131d8576131d761317b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132188261289a565b91506132238361289a565b92508282026132318161289a565b915082820484148315176132485761324761317b565b5b5092915050565b60006060820190506132646000830186612973565b613271602083018561291c565b61327e604083018461291c565b949350505050565b60008190508160005260206000209050919050565b600081546132a88161304c565b6132b28186612e28565b945060018216600081146132cd57600181146132e357613316565b60ff198316865281151560200286019350613316565b6132ec85613286565b60005b8381101561330e578154818901526001820191506020810190506132ef565b808801955050505b50505092915050565b600060a082019050613334600083018861291c565b613341602083018761291c565b61334e6040830186612973565b61335b6060830185612973565b818103608083015261336d818461329b565b90509695505050505050565b60008160e01c9050919050565b600060033d11156133a55760046000803e6133a2600051613379565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133e0826127bc565b810181811067ffffffffffffffff821117156133ff576133fe6133a8565b5b80604052505050565b600060443d106134955761341a612828565b60043d036004823e80513d602482011167ffffffffffffffff82111715613442575050613495565b808201805167ffffffffffffffff8111156134605750505050613495565b80602083010160043d03850181111561347d575050505050613495565b61348c826020018501866133d7565b82955050505050505b90565b60006134a38261289a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d5576134d461317b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351a8261289a565b91506135258361289a565b925082613535576135346134e0565b5b828204905092915050565b600061354b8261289a565b91506135568361289a565b925082820390508181111561356e5761356d61317b565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006135d0602b83612781565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061363c601583612781565b915061364782613606565b602082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006136a8601483612781565b91506136b382613672565b602082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000613714601783612781565b915061371f826136de565b602082019050919050565b6000602082019050818103600083015261374381613707565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000613780601a83612781565b915061378b8261374a565b602082019050919050565b600060208201905081810360008301526137af81613773565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006137ec601d83612781565b91506137f7826137b6565b602082019050919050565b6000602082019050818103600083015261381b816137df565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000613858601e83612781565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006138c4601583612781565b91506138cf8261388e565b602082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613915565b61395c8683613915565b95508019841693508086168417925050509392505050565b6000819050919050565b600061399961399461398f8461289a565b613974565b61289a565b9050919050565b6000819050919050565b6139b38361397e565b6139c76139bf826139a0565b848454613922565b825550505050565b600090565b6139dc6139cf565b6139e78184846139aa565b505050565b5b81811015613a0b57613a006000826139d4565b6001810190506139ed565b5050565b601f821115613a5057613a2181613286565b613a2a84613905565b81016020851015613a39578190505b613a4d613a4585613905565b8301826139ec565b50505b505050565b600082821c905092915050565b6000613a7360001984600802613a55565b1980831691505092915050565b6000613a8c8383613a62565b9150826002028217905092915050565b613aa683836138fa565b67ffffffffffffffff811115613abf57613abe6133a8565b5b613ac9825461304c565b613ad4828285613a0f565b6000601f831160018114613b035760008415613af1578287013590505b613afb8582613a80565b865550613b63565b601f198416613b1186613286565b60005b82811015613b3957848901358255600182019150602085019450602081019050613b14565b86831015613b565784890135613b52601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b6000606082019050613b816000830186612982565b613b8e6020830185612973565b613b9b6040830184612973565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613c0457613bd581613bae565b613bde84613905565b81016020851015613bed578190505b613c01613bf985613905565b8301826139ec565b50505b505050565b613c138383613ba3565b67ffffffffffffffff811115613c2c57613c2b6133a8565b5b613c36825461304c565b613c41828285613bc3565b6000601f831160018114613c705760008415613c5e578287013590505b613c688582613a80565b865550613cd0565b601f198416613c7e86613bae565b60005b82811015613ca657848901358255600182019150602085019450602081019050613c81565b86831015613cc35784890135613cbf601f891682613a62565b8355505b6001600288020188555050505b50505050505050565b60006040820190508181036000830152613cf381856127cd565b90508181036020830152613d0781846127cd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613d46601883612781565b9150613d5182613d10565b602082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea26469706673582212205fbb53553281f45b822d687ded23574e963223a2a01d508bb51d82875c44f00464736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Onboarding.json b/client/src/assets/Onboarding.json index d29fb2e..aff7a53 100644 --- a/client/src/assets/Onboarding.json +++ b/client/src/assets/Onboarding.json @@ -10,6 +10,11 @@ "name": "dao_", "type": "address" }, + { + "internalType": "contract Proposals", + "name": "proposals_", + "type": "address" + }, { "internalType": "uint256", "name": "price_", @@ -124,6 +129,29 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "onProposalAccepted", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -170,6 +198,66 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "priceProposalCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "priceProposals", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "proposalIndex", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "string", + "name": "contentId", + "type": "string" + }, + { + "internalType": "uint256[3]", + "name": "durations", + "type": "uint256[3]" + } + ], + "name": "proposeNewPrice", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { @@ -347,8 +435,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002c9838038062002c9883398181016040528101906200003791906200013a565b8181818073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508060a081815250505050505062000181565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b38262000086565b9050919050565b6000620000c782620000a6565b9050919050565b620000d981620000ba565b8114620000e557600080fd5b50565b600081519050620000f981620000ce565b92915050565b6000819050919050565b6200011481620000ff565b81146200012057600080fd5b50565b600081519050620001348162000109565b92915050565b6000806040838503121562000154576200015362000081565b5b60006200016485828601620000e8565b9250506020620001778582860162000123565b9150509250929050565b60805160a051612ac0620001d8600039600081816102c50152610e6801526000818161085201528181610bb001528181610cb201528181610dcc01528181610e8c01528181610fd8015261109f0152612ac06000f3fe6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b4e6a1d514610205578063b5b20c001461022e578063c4a9e11614610257578063d5a44f8614610282576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c19190611631565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611712565b6103cf565b005b3480156100fd57600080fd5b5061011860048036038101906101139190611765565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c91906117d4565b60405180910390f35b34801561015157600080fd5b5061016c600480360381019061016791906117ef565b6106a1565b005b34801561017a57600080fd5b50610195600480360381019061019091906117ef565b61092e565b6040516101a8979695949392919061194d565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d391906119f6565b610aba565b005b3480156101e657600080fd5b506101ef610e66565b6040516101fc91906117d4565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190611a8c565b610e8a565b005b34801561023a57600080fd5b5061025560048036038101906102509190611b26565b611193565b005b34801561026357600080fd5b5061026c611359565b60405161027991906117d4565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906117ef565b61135f565b6040516102ba959493929190611b66565b60405180910390f35b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611c05565b60405180910390fd5b60006003600081548092919061033b90611c54565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad826113cf565b816003018190555083838260040191826103c8929190611ee2565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611ffe565b60405180910390fd5b60006001600081548092919061042790611c54565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b919061201e565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d291906117d4565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b61182b565b5b8160020160009054906101000a900460ff1660038111156105305761052f61182b565b5b14610570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105679061209e565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612130565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106445761064361182b565b5b0217905550838383600501918261065c929190611ee2565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c91906117d4565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610740906121c2565b60405180910390fd5b8060020154421161078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690612254565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906122c0565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90612352565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af929190612372565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906123b0565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161092291906117d4565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611d05565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611d05565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611d05565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611d05565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae461182b565b5b8160020160009054906101000a900460ff166003811115610b0957610b0861182b565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612429565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a61182b565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c309291906124cd565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c739190612512565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061253f565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610cfd9190612597565b8660010154610d0c91906125c8565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610d5391906117d4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610d85989796959493929190612737565b60206040518083038185885af1158015610da3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dc89190612512565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610e2c939291906127be565b600060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90612867565b60405180910390fd5b60008282810190610f2991906117ef565b90506000600260008381526020019081526020016000209050871580610f4d575086155b15610fd4578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610fa19190612597565b9081150290604051600060405180830381858888f19350505050158015610fcc573d6000803e3d6000fd5b50505061118b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016110589291906124cd565b6020604051808303816000875af1158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190612512565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546110ea9190612597565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161114397969594939291906128ad565b60206040518083038185885af1158015611161573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111869190612512565b505050505b505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906129a4565b60405180910390fd5b8060030160019054906101000a900460ff161561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906122c0565b60405180910390fd5b8060030160009054906101000a900460ff16156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690612352565b60405180910390fd5b80600201544211156113045781426112f7919061201e565b816002018190555061131d565b818160020154611314919061201e565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161134c91906117d4565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006113d961144d565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161143f9291906129c4565b60405180910390a150919050565b60008060005b6001548110156114d15760008082815260200190815260200160002060030160009054906101000a900460ff166114c4576000808281526020019081526020016000206002015442116114c45760008082815260200190815260200160002060010154826114c1919061201e565b91505b8080600101915050611453565b5060008111611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90612a39565b60405180910390fd5b600081446115239190612a59565b9050600080600090505b6001548110156115bb5760008082815260200190815260200160002060030160009054906101000a900460ff166115ae576000808281526020019081526020016000206002015442116115ae57600080828152602001908152602001600020600101548261159b919061201e565b9150828211156115ad578094506115bb565b5b808060010191505061152d565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126115f1576115f06115cc565b5b8235905067ffffffffffffffff81111561160e5761160d6115d1565b5b60208301915083600182028301111561162a576116296115d6565b5b9250929050565b60008060208385031215611648576116476115c2565b5b600083013567ffffffffffffffff811115611666576116656115c7565b5b611672858286016115db565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116a98261167e565b9050919050565b6116b98161169e565b81146116c457600080fd5b50565b6000813590506116d6816116b0565b92915050565b6000819050919050565b6116ef816116dc565b81146116fa57600080fd5b50565b60008135905061170c816116e6565b92915050565b60008060006060848603121561172b5761172a6115c2565b5b6000611739868287016116c7565b935050602061174a868287016116fd565b925050604061175b868287016116fd565b9150509250925092565b60008060006040848603121561177e5761177d6115c2565b5b600061178c868287016116fd565b935050602084013567ffffffffffffffff8111156117ad576117ac6115c7565b5b6117b9868287016115db565b92509250509250925092565b6117ce816116dc565b82525050565b60006020820190506117e960008301846117c5565b92915050565b600060208284031215611805576118046115c2565b5b6000611813848285016116fd565b91505092915050565b6118258161169e565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061186b5761186a61182b565b5b50565b600081905061187c8261185a565b919050565b600061188c8261186e565b9050919050565b61189c81611881565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118dc5780820151818401526020810190506118c1565b60008484015250505050565b6000601f19601f8301169050919050565b6000611904826118a2565b61190e81856118ad565b935061191e8185602086016118be565b611927816118e8565b840191505092915050565b60008115159050919050565b61194781611932565b82525050565b600060e082019050611962600083018a61181c565b61196f60208301896117c5565b61197c6040830188611893565b61198960608301876117c5565b818103608083015261199b81866118f9565b905081810360a08301526119af81856118f9565b90506119be60c083018461193e565b98975050505050505050565b6119d381611932565b81146119de57600080fd5b50565b6000813590506119f0816119ca565b92915050565b60008060408385031215611a0d57611a0c6115c2565b5b6000611a1b858286016116fd565b9250506020611a2c858286016119e1565b9150509250929050565b60008083601f840112611a4c57611a4b6115cc565b5b8235905067ffffffffffffffff811115611a6957611a686115d1565b5b602083019150836001820283011115611a8557611a846115d6565b5b9250929050565b60008060008060008060a08789031215611aa957611aa86115c2565b5b6000611ab789828a016119e1565b9650506020611ac889828a016119e1565b9550506040611ad989828a016116fd565b9450506060611aea89828a016116fd565b935050608087013567ffffffffffffffff811115611b0b57611b0a6115c7565b5b611b1789828a01611a36565b92509250509295509295509295565b60008060408385031215611b3d57611b3c6115c2565b5b6000611b4b858286016116fd565b9250506020611b5c858286016116fd565b9150509250929050565b600060a082019050611b7b600083018861181c565b611b8860208301876117c5565b611b9560408301866117c5565b611ba2606083018561193e565b611baf608083018461193e565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611bef6010836118ad565b9150611bfa82611bb9565b602082019050919050565b60006020820190508181036000830152611c1e81611be2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c5f826116dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c9157611c90611c25565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d1d57607f821691505b602082108103611d3057611d2f611cd6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d5b565b611da28683611d5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ddf611dda611dd5846116dc565b611dba565b6116dc565b9050919050565b6000819050919050565b611df983611dc4565b611e0d611e0582611de6565b848454611d68565b825550505050565b600090565b611e22611e15565b611e2d818484611df0565b505050565b5b81811015611e5157611e46600082611e1a565b600181019050611e33565b5050565b601f821115611e9657611e6781611d36565b611e7084611d4b565b81016020851015611e7f578190505b611e93611e8b85611d4b565b830182611e32565b50505b505050565b600082821c905092915050565b6000611eb960001984600802611e9b565b1980831691505092915050565b6000611ed28383611ea8565b9150826002028217905092915050565b611eec8383611c9c565b67ffffffffffffffff811115611f0557611f04611ca7565b5b611f0f8254611d05565b611f1a828285611e55565b6000601f831160018114611f495760008415611f37578287013590505b611f418582611ec6565b865550611fa9565b601f198416611f5786611d36565b60005b82811015611f7f57848901358255600182019150602085019450602081019050611f5a565b86831015611f9c5784890135611f98601f891682611ea8565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fe86011836118ad565b9150611ff382611fb2565b602082019050919050565b6000602082019050818103600083015261201781611fdb565b9050919050565b6000612029826116dc565b9150612034836116dc565b925082820190508082111561204c5761204b611c25565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006120886018836118ad565b915061209382612052565b602082019050919050565b600060208201905081810360008301526120b78161207b565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061211a603a836118ad565b9150612125826120be565b604082019050919050565b600060208201905081810360008301526121498161210d565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006121ac6034836118ad565b91506121b782612150565b604082019050919050565b600060208201905081810360008301526121db8161219f565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061223e6022836118ad565b9150612249826121e2565b604082019050919050565b6000602082019050818103600083015261226d81612231565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006122aa6020836118ad565b91506122b582612274565b602082019050919050565b600060208201905081810360008301526122d98161229d565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061233c6024836118ad565b9150612347826122e0565b604082019050919050565b6000602082019050818103600083015261236b8161232f565b9050919050565b6000604082019050612387600083018561181c565b61239460208301846117c5565b9392505050565b6000815190506123aa816119ca565b92915050565b6000602082840312156123c6576123c56115c2565b5b60006123d48482850161239b565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006124136020836118ad565b915061241e826123dd565b602082019050919050565b6000602082019050818103600083015261244281612406565b9050919050565b6000815461245681611d05565b61246081866118ad565b9450600182166000811461247b5760018114612491576124c4565b60ff1983168652811515602002860193506124c4565b61249a85611d36565b60005b838110156124bc5781548189015260018201915060208101905061249d565b808801955050505b50505092915050565b60006040820190506124e2600083018561181c565b81810360208301526124f48184612449565b90509392505050565b60008151905061250c816116e6565b92915050565b600060208284031215612528576125276115c2565b5b6000612536848285016124fd565b91505092915050565b600060408201905061255460008301856117c5565b612561602083018461193e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125a2826116dc565b91506125ad836116dc565b9250826125bd576125bc612568565b5b828204905092915050565b60006125d3826116dc565b91506125de836116dc565b92508282039050818111156125f6576125f5611c25565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b612625816116dc565b82525050565b6000612637838361261c565b60208301905092915050565b6000602082019050919050565b612659816125fc565b6126638184612607565b925061266e82612612565b8060005b8381101561269f578151612686878261262b565b965061269183612643565b925050600181019050612672565b505050505050565b6000819050919050565b60006126cc6126c76126c2846126a7565b611dba565b6116dc565b9050919050565b6126dc816126b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612709826126e2565b61271381856126ed565b93506127238185602086016118be565b61272c816118e8565b840191505092915050565b60006101408201905061274d600083018b6117c5565b61275a602083018a6117c5565b6127676040830189612650565b6127746080830188612650565b61278160c08301876126d3565b61278e60e083018661193e565b61279c61010083018561193e565b8181036101208301526127af81846126fe565b90509998505050505050505050565b60006060820190506127d360008301866117c5565b6127e060208301856117c5565b6127ed604083018461193e565b949350505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128516031836118ad565b915061285c826127f5565b604082019050919050565b6000602082019050818103600083015261288081612844565b9050919050565b50565b60006128976000836126ed565b91506128a282612887565b600082019050919050565b6000610140820190506128c3600083018a6117c5565b6128d060208301896117c5565b6128dd6040830188612650565b6128ea6080830187612650565b6128f760c08301866126d3565b61290460e083018561193e565b61291261010083018461193e565b8181036101208301526129248161288a565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061298e6033836118ad565b915061299982612932565b604082019050919050565b600060208201905081810360008301526129bd81612981565b9050919050565b60006040820190506129d960008301856117c5565b6129e660208301846117c5565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a23601a836118ad565b9150612a2e826129ed565b602082019050919050565b60006020820190508181036000830152612a5281612a16565b9050919050565b6000612a64826116dc565b9150612a6f836116dc565b925082612a7f57612a7e612568565b5b82820690509291505056fea264697066735822122045e4b2d956fc68f4f654b2434dfa7f4def674edea292baa82e55b7d50648736e64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b4e6a1d514610205578063b5b20c001461022e578063c4a9e11614610257578063d5a44f8614610282576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c19190611631565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611712565b6103cf565b005b3480156100fd57600080fd5b5061011860048036038101906101139190611765565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c91906117d4565b60405180910390f35b34801561015157600080fd5b5061016c600480360381019061016791906117ef565b6106a1565b005b34801561017a57600080fd5b50610195600480360381019061019091906117ef565b61092e565b6040516101a8979695949392919061194d565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d391906119f6565b610aba565b005b3480156101e657600080fd5b506101ef610e66565b6040516101fc91906117d4565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190611a8c565b610e8a565b005b34801561023a57600080fd5b5061025560048036038101906102509190611b26565b611193565b005b34801561026357600080fd5b5061026c611359565b60405161027991906117d4565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906117ef565b61135f565b6040516102ba959493929190611b66565b60405180910390f35b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611c05565b60405180910390fd5b60006003600081548092919061033b90611c54565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad826113cf565b816003018190555083838260040191826103c8929190611ee2565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611ffe565b60405180910390fd5b60006001600081548092919061042790611c54565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b919061201e565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d291906117d4565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b61182b565b5b8160020160009054906101000a900460ff1660038111156105305761052f61182b565b5b14610570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105679061209e565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612130565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106445761064361182b565b5b0217905550838383600501918261065c929190611ee2565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c91906117d4565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610740906121c2565b60405180910390fd5b8060020154421161078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690612254565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906122c0565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90612352565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af929190612372565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906123b0565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161092291906117d4565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611d05565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611d05565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611d05565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611d05565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae461182b565b5b8160020160009054906101000a900460ff166003811115610b0957610b0861182b565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612429565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a61182b565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c309291906124cd565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c739190612512565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061253f565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610cfd9190612597565b8660010154610d0c91906125c8565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610d5391906117d4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610d85989796959493929190612737565b60206040518083038185885af1158015610da3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dc89190612512565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610e2c939291906127be565b600060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90612867565b60405180910390fd5b60008282810190610f2991906117ef565b90506000600260008381526020019081526020016000209050871580610f4d575086155b15610fd4578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610fa19190612597565b9081150290604051600060405180830381858888f19350505050158015610fcc573d6000803e3d6000fd5b50505061118b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016110589291906124cd565b6020604051808303816000875af1158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190612512565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546110ea9190612597565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161114397969594939291906128ad565b60206040518083038185885af1158015611161573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111869190612512565b505050505b505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906129a4565b60405180910390fd5b8060030160019054906101000a900460ff161561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906122c0565b60405180910390fd5b8060030160009054906101000a900460ff16156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690612352565b60405180910390fd5b80600201544211156113045781426112f7919061201e565b816002018190555061131d565b818160020154611314919061201e565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161134c91906117d4565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006113d961144d565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161143f9291906129c4565b60405180910390a150919050565b60008060005b6001548110156114d15760008082815260200190815260200160002060030160009054906101000a900460ff166114c4576000808281526020019081526020016000206002015442116114c45760008082815260200190815260200160002060010154826114c1919061201e565b91505b8080600101915050611453565b5060008111611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90612a39565b60405180910390fd5b600081446115239190612a59565b9050600080600090505b6001548110156115bb5760008082815260200190815260200160002060030160009054906101000a900460ff166115ae576000808281526020019081526020016000206002015442116115ae57600080828152602001908152602001600020600101548261159b919061201e565b9150828211156115ad578094506115bb565b5b808060010191505061152d565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126115f1576115f06115cc565b5b8235905067ffffffffffffffff81111561160e5761160d6115d1565b5b60208301915083600182028301111561162a576116296115d6565b5b9250929050565b60008060208385031215611648576116476115c2565b5b600083013567ffffffffffffffff811115611666576116656115c7565b5b611672858286016115db565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116a98261167e565b9050919050565b6116b98161169e565b81146116c457600080fd5b50565b6000813590506116d6816116b0565b92915050565b6000819050919050565b6116ef816116dc565b81146116fa57600080fd5b50565b60008135905061170c816116e6565b92915050565b60008060006060848603121561172b5761172a6115c2565b5b6000611739868287016116c7565b935050602061174a868287016116fd565b925050604061175b868287016116fd565b9150509250925092565b60008060006040848603121561177e5761177d6115c2565b5b600061178c868287016116fd565b935050602084013567ffffffffffffffff8111156117ad576117ac6115c7565b5b6117b9868287016115db565b92509250509250925092565b6117ce816116dc565b82525050565b60006020820190506117e960008301846117c5565b92915050565b600060208284031215611805576118046115c2565b5b6000611813848285016116fd565b91505092915050565b6118258161169e565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061186b5761186a61182b565b5b50565b600081905061187c8261185a565b919050565b600061188c8261186e565b9050919050565b61189c81611881565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118dc5780820151818401526020810190506118c1565b60008484015250505050565b6000601f19601f8301169050919050565b6000611904826118a2565b61190e81856118ad565b935061191e8185602086016118be565b611927816118e8565b840191505092915050565b60008115159050919050565b61194781611932565b82525050565b600060e082019050611962600083018a61181c565b61196f60208301896117c5565b61197c6040830188611893565b61198960608301876117c5565b818103608083015261199b81866118f9565b905081810360a08301526119af81856118f9565b90506119be60c083018461193e565b98975050505050505050565b6119d381611932565b81146119de57600080fd5b50565b6000813590506119f0816119ca565b92915050565b60008060408385031215611a0d57611a0c6115c2565b5b6000611a1b858286016116fd565b9250506020611a2c858286016119e1565b9150509250929050565b60008083601f840112611a4c57611a4b6115cc565b5b8235905067ffffffffffffffff811115611a6957611a686115d1565b5b602083019150836001820283011115611a8557611a846115d6565b5b9250929050565b60008060008060008060a08789031215611aa957611aa86115c2565b5b6000611ab789828a016119e1565b9650506020611ac889828a016119e1565b9550506040611ad989828a016116fd565b9450506060611aea89828a016116fd565b935050608087013567ffffffffffffffff811115611b0b57611b0a6115c7565b5b611b1789828a01611a36565b92509250509295509295509295565b60008060408385031215611b3d57611b3c6115c2565b5b6000611b4b858286016116fd565b9250506020611b5c858286016116fd565b9150509250929050565b600060a082019050611b7b600083018861181c565b611b8860208301876117c5565b611b9560408301866117c5565b611ba2606083018561193e565b611baf608083018461193e565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611bef6010836118ad565b9150611bfa82611bb9565b602082019050919050565b60006020820190508181036000830152611c1e81611be2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c5f826116dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c9157611c90611c25565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d1d57607f821691505b602082108103611d3057611d2f611cd6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d5b565b611da28683611d5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ddf611dda611dd5846116dc565b611dba565b6116dc565b9050919050565b6000819050919050565b611df983611dc4565b611e0d611e0582611de6565b848454611d68565b825550505050565b600090565b611e22611e15565b611e2d818484611df0565b505050565b5b81811015611e5157611e46600082611e1a565b600181019050611e33565b5050565b601f821115611e9657611e6781611d36565b611e7084611d4b565b81016020851015611e7f578190505b611e93611e8b85611d4b565b830182611e32565b50505b505050565b600082821c905092915050565b6000611eb960001984600802611e9b565b1980831691505092915050565b6000611ed28383611ea8565b9150826002028217905092915050565b611eec8383611c9c565b67ffffffffffffffff811115611f0557611f04611ca7565b5b611f0f8254611d05565b611f1a828285611e55565b6000601f831160018114611f495760008415611f37578287013590505b611f418582611ec6565b865550611fa9565b601f198416611f5786611d36565b60005b82811015611f7f57848901358255600182019150602085019450602081019050611f5a565b86831015611f9c5784890135611f98601f891682611ea8565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fe86011836118ad565b9150611ff382611fb2565b602082019050919050565b6000602082019050818103600083015261201781611fdb565b9050919050565b6000612029826116dc565b9150612034836116dc565b925082820190508082111561204c5761204b611c25565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006120886018836118ad565b915061209382612052565b602082019050919050565b600060208201905081810360008301526120b78161207b565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061211a603a836118ad565b9150612125826120be565b604082019050919050565b600060208201905081810360008301526121498161210d565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006121ac6034836118ad565b91506121b782612150565b604082019050919050565b600060208201905081810360008301526121db8161219f565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061223e6022836118ad565b9150612249826121e2565b604082019050919050565b6000602082019050818103600083015261226d81612231565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006122aa6020836118ad565b91506122b582612274565b602082019050919050565b600060208201905081810360008301526122d98161229d565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061233c6024836118ad565b9150612347826122e0565b604082019050919050565b6000602082019050818103600083015261236b8161232f565b9050919050565b6000604082019050612387600083018561181c565b61239460208301846117c5565b9392505050565b6000815190506123aa816119ca565b92915050565b6000602082840312156123c6576123c56115c2565b5b60006123d48482850161239b565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006124136020836118ad565b915061241e826123dd565b602082019050919050565b6000602082019050818103600083015261244281612406565b9050919050565b6000815461245681611d05565b61246081866118ad565b9450600182166000811461247b5760018114612491576124c4565b60ff1983168652811515602002860193506124c4565b61249a85611d36565b60005b838110156124bc5781548189015260018201915060208101905061249d565b808801955050505b50505092915050565b60006040820190506124e2600083018561181c565b81810360208301526124f48184612449565b90509392505050565b60008151905061250c816116e6565b92915050565b600060208284031215612528576125276115c2565b5b6000612536848285016124fd565b91505092915050565b600060408201905061255460008301856117c5565b612561602083018461193e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125a2826116dc565b91506125ad836116dc565b9250826125bd576125bc612568565b5b828204905092915050565b60006125d3826116dc565b91506125de836116dc565b92508282039050818111156125f6576125f5611c25565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b612625816116dc565b82525050565b6000612637838361261c565b60208301905092915050565b6000602082019050919050565b612659816125fc565b6126638184612607565b925061266e82612612565b8060005b8381101561269f578151612686878261262b565b965061269183612643565b925050600181019050612672565b505050505050565b6000819050919050565b60006126cc6126c76126c2846126a7565b611dba565b6116dc565b9050919050565b6126dc816126b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612709826126e2565b61271381856126ed565b93506127238185602086016118be565b61272c816118e8565b840191505092915050565b60006101408201905061274d600083018b6117c5565b61275a602083018a6117c5565b6127676040830189612650565b6127746080830188612650565b61278160c08301876126d3565b61278e60e083018661193e565b61279c61010083018561193e565b8181036101208301526127af81846126fe565b90509998505050505050505050565b60006060820190506127d360008301866117c5565b6127e060208301856117c5565b6127ed604083018461193e565b949350505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128516031836118ad565b915061285c826127f5565b604082019050919050565b6000602082019050818103600083015261288081612844565b9050919050565b50565b60006128976000836126ed565b91506128a282612887565b600082019050919050565b6000610140820190506128c3600083018a6117c5565b6128d060208301896117c5565b6128dd6040830188612650565b6128ea6080830187612650565b6128f760c08301866126d3565b61290460e083018561193e565b61291261010083018461193e565b8181036101208301526129248161288a565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061298e6033836118ad565b915061299982612932565b604082019050919050565b600060208201905081810360008301526129bd81612981565b9050919050565b60006040820190506129d960008301856117c5565b6129e660208301846117c5565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a23601a836118ad565b9150612a2e826129ed565b602082019050919050565b60006020820190508181036000830152612a5281612a16565b9050919050565b6000612a64826116dc565b9150612a6f836116dc565b925082612a7f57612a7e612568565b5b82820690509291505056fea264697066735822122045e4b2d956fc68f4f654b2434dfa7f4def674edea292baa82e55b7d50648736e64736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003196380380620031968339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612f33620002636000396000818161093101528181610ccd01528181610dcf01528181610ee9015281816110e70152818161123301526112fa0152612f336000f3fe6080604052600436106100f35760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102e8578063cf37625614610313578063d5a44f8614610351578063d76b679414610392576100f3565b806399ad6c561461024f578063a035b1fe1461026b578063b4e6a1d514610296578063b5b20c00146102bf576100f3565b80638150d507116100c65780638150d50714610191578063815a0572146101ba57806381d12c58146101e3578063854b6a4f14610226576100f3565b80630d0271d6146100f8578063216ed6ad146101145780635b5cf6d41461013d5780635badbe4c14610166575b600080fd5b610112600480360381019061010d91906118be565b6103bd565b005b34801561012057600080fd5b5061013b6004803603810190610136919061199f565b6104ab565b005b34801561014957600080fd5b50610164600480360381019061015f91906119f2565b6105be565b005b34801561017257600080fd5b5061017b610779565b6040516101889190611a61565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611a7c565b61077f565b005b3480156101c657600080fd5b506101e160048036038101906101dc9190611aff565b610a0d565b005b3480156101ef57600080fd5b5061020a60048036038101906102059190611a7c565b610a4a565b60405161021d9796959493929190611ca4565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190611d4d565b610bd6565b005b61026960048036038101906102649190611daf565b610f83565b005b34801561027757600080fd5b506102806110df565b60405161028d9190611a61565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611e23565b6110e5565b005b3480156102cb57600080fd5b506102e660048036038101906102e19190611ebd565b6113ee565b005b3480156102f457600080fd5b506102fd6115b5565b60405161030a9190611a61565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190611a7c565b6115bb565b604051610348929190611efd565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190611a7c565b6115df565b604051610389959493929190611f26565b60405180910390f35b34801561039e57600080fd5b506103a761164f565b6040516103b49190611a61565b60405180910390f35b600154341015610402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f990611fc5565b60405180910390fd5b60006007600081548092919061041790612014565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061048982611655565b816003018190555083838260040191826104a49291906122a2565b5050505050565b600082116104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e5906123be565b60405180910390fd5b60006005600081548092919061050390612014565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261057891906123de565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105af9190611a61565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105e9576105e8611b82565b5b8160020160009054906101000a900460ff16600381111561060d5761060c611b82565b5b1461064d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106449061245e565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906124f0565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561072257610721611b82565b5b0217905550838383600501918261073a9291906122a2565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161076a9190611a61565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612582565b60405180910390fd5b8060020154421161086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612614565b60405180910390fd5b8060030160019054906101000a900460ff16156108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612680565b60405180910390fd5b8060030160009054906101000a900460ff1615610912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090990612712565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161098e929190612732565b6020604051808303816000875af11580156109ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d19190612770565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610a019190611a61565b60405180910390a15050565b60008282810190610a1e9190611a7c565b905060006002600083815260200190815260200160002090508060000154600181905550505050505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610ab2906120c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade906120c5565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b505050505090806005018054610b40906120c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906120c5565b8015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c0157610c00611b82565b5b8160020160009054906101000a900460ff166003811115610c2557610c24611b82565b5b14610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906127e9565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610ca857610ca7611b82565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d4d92919061288d565b6020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9091906128d2565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610dc39291906128ff565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610e1a9190612957565b8660010154610e299190612988565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610e709190611a61565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610ea2989796959493929190612af7565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906128d2565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610f4993929190612b7e565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f9890612014565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9bde1603487878760006003811061101157611010612bb5565b5b60200201358860016003811061102a57611029612bb5565b5b60200201358960026003811061104357611042612bb5565b5b602002013560018a60405160200161105b9190611a61565b6040516020818303038152906040526040518963ffffffff1660e01b815260040161108c9796959493929190612c20565b60206040518083038185885af11580156110aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110cf91906128d2565b8160010181905550505050505050565b60015481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90612d03565b60405180910390fd5b600082828101906111849190611a7c565b905060006006600083815260200190815260200160002090508715806111a8575086155b1561122f578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a83600101546111fc9190612957565b9081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050506113e6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016112b392919061288d565b6020604051808303816000875af11580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f691906128d2565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546113459190612957565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161139e9796959493929190612d49565b60206040518083038185885af11580156113bc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113e191906128d2565b505050505b505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90612e40565b60405180910390fd5b8060030160019054906101000a900460ff16156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090612680565b60405180910390fd5b8060030160009054906101000a900460ff161561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290612712565b60405180910390fd5b806002015442111561156057814261155391906123de565b8160020181905550611579565b81816002015461157091906123de565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516115a89190611a61565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b600061165f6116d4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516116c6929190611efd565b60405180910390a150919050565b60008060005b60055481101561175b576004600082815260200190815260200160002060030160009054906101000a900460ff1661174e576004600082815260200190815260200160002060020154421161174e5760046000828152602001908152602001600020600101548261174b91906123de565b91505b80806001019150506116da565b506000811161179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612eac565b60405180910390fd5b600081446117ad9190612ecc565b9050600080600090505b600554811015611848576004600082815260200190815260200160002060030160009054906101000a900460ff1661183b576004600082815260200190815260200160002060020154421161183b5760046000828152602001908152602001600020600101548261182891906123de565b91508282111561183a57809450611848565b5b80806001019150506117b7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261187e5761187d611859565b5b8235905067ffffffffffffffff81111561189b5761189a61185e565b5b6020830191508360018202830111156118b7576118b6611863565b5b9250929050565b600080602083850312156118d5576118d461184f565b5b600083013567ffffffffffffffff8111156118f3576118f2611854565b5b6118ff85828601611868565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119368261190b565b9050919050565b6119468161192b565b811461195157600080fd5b50565b6000813590506119638161193d565b92915050565b6000819050919050565b61197c81611969565b811461198757600080fd5b50565b60008135905061199981611973565b92915050565b6000806000606084860312156119b8576119b761184f565b5b60006119c686828701611954565b93505060206119d78682870161198a565b92505060406119e88682870161198a565b9150509250925092565b600080600060408486031215611a0b57611a0a61184f565b5b6000611a198682870161198a565b935050602084013567ffffffffffffffff811115611a3a57611a39611854565b5b611a4686828701611868565b92509250509250925092565b611a5b81611969565b82525050565b6000602082019050611a766000830184611a52565b92915050565b600060208284031215611a9257611a9161184f565b5b6000611aa08482850161198a565b91505092915050565b60008083601f840112611abf57611abe611859565b5b8235905067ffffffffffffffff811115611adc57611adb61185e565b5b602083019150836001820283011115611af857611af7611863565b5b9250929050565b60008060008060608587031215611b1957611b1861184f565b5b6000611b278782880161198a565b9450506020611b388782880161198a565b935050604085013567ffffffffffffffff811115611b5957611b58611854565b5b611b6587828801611aa9565b925092505092959194509250565b611b7c8161192b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611bc257611bc1611b82565b5b50565b6000819050611bd382611bb1565b919050565b6000611be382611bc5565b9050919050565b611bf381611bd8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c33578082015181840152602081019050611c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5b82611bf9565b611c658185611c04565b9350611c75818560208601611c15565b611c7e81611c3f565b840191505092915050565b60008115159050919050565b611c9e81611c89565b82525050565b600060e082019050611cb9600083018a611b73565b611cc66020830189611a52565b611cd36040830188611bea565b611ce06060830187611a52565b8181036080830152611cf28186611c50565b905081810360a0830152611d068185611c50565b9050611d1560c0830184611c95565b98975050505050505050565b611d2a81611c89565b8114611d3557600080fd5b50565b600081359050611d4781611d21565b92915050565b60008060408385031215611d6457611d6361184f565b5b6000611d728582860161198a565b9250506020611d8385828601611d38565b9150509250929050565b600081905082602060030282011115611da957611da8611863565b5b92915050565b60008060008060a08587031215611dc957611dc861184f565b5b6000611dd78782880161198a565b945050602085013567ffffffffffffffff811115611df857611df7611854565b5b611e0487828801611868565b93509350506040611e1787828801611d8d565b91505092959194509250565b60008060008060008060a08789031215611e4057611e3f61184f565b5b6000611e4e89828a01611d38565b9650506020611e5f89828a01611d38565b9550506040611e7089828a0161198a565b9450506060611e8189828a0161198a565b935050608087013567ffffffffffffffff811115611ea257611ea1611854565b5b611eae89828a01611aa9565b92509250509295509295509295565b60008060408385031215611ed457611ed361184f565b5b6000611ee28582860161198a565b9250506020611ef38582860161198a565b9150509250929050565b6000604082019050611f126000830185611a52565b611f1f6020830184611a52565b9392505050565b600060a082019050611f3b6000830188611b73565b611f486020830187611a52565b611f556040830186611a52565b611f626060830185611c95565b611f6f6080830184611c95565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611faf601083611c04565b9150611fba82611f79565b602082019050919050565b60006020820190508181036000830152611fde81611fa2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061201f82611969565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361205157612050611fe5565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806120dd57607f821691505b6020821081036120f0576120ef612096565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261211b565b612162868361211b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061219f61219a61219584611969565b61217a565b611969565b9050919050565b6000819050919050565b6121b983612184565b6121cd6121c5826121a6565b848454612128565b825550505050565b600090565b6121e26121d5565b6121ed8184846121b0565b505050565b5b81811015612211576122066000826121da565b6001810190506121f3565b5050565b601f82111561225657612227816120f6565b6122308461210b565b8101602085101561223f578190505b61225361224b8561210b565b8301826121f2565b50505b505050565b600082821c905092915050565b60006122796000198460080261225b565b1980831691505092915050565b60006122928383612268565b9150826002028217905092915050565b6122ac838361205c565b67ffffffffffffffff8111156122c5576122c4612067565b5b6122cf82546120c5565b6122da828285612215565b6000601f83116001811461230957600084156122f7578287013590505b6123018582612286565b865550612369565b601f198416612317866120f6565b60005b8281101561233f5784890135825560018201915060208501945060208101905061231a565b8683101561235c5784890135612358601f891682612268565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006123a8601183611c04565b91506123b382612372565b602082019050919050565b600060208201905081810360008301526123d78161239b565b9050919050565b60006123e982611969565b91506123f483611969565b925082820190508082111561240c5761240b611fe5565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612448601883611c04565b915061245382612412565b602082019050919050565b600060208201905081810360008301526124778161243b565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006124da603a83611c04565b91506124e58261247e565b604082019050919050565b60006020820190508181036000830152612509816124cd565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061256c603483611c04565b915061257782612510565b604082019050919050565b6000602082019050818103600083015261259b8161255f565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006125fe602283611c04565b9150612609826125a2565b604082019050919050565b6000602082019050818103600083015261262d816125f1565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061266a602083611c04565b915061267582612634565b602082019050919050565b600060208201905081810360008301526126998161265d565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006126fc602483611c04565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b60006040820190506127476000830185611b73565b6127546020830184611a52565b9392505050565b60008151905061276a81611d21565b92915050565b6000602082840312156127865761278561184f565b5b60006127948482850161275b565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006127d3602083611c04565b91506127de8261279d565b602082019050919050565b60006020820190508181036000830152612802816127c6565b9050919050565b60008154612816816120c5565b6128208186611c04565b9450600182166000811461283b576001811461285157612884565b60ff198316865281151560200286019350612884565b61285a856120f6565b60005b8381101561287c5781548189015260018201915060208101905061285d565b808801955050505b50505092915050565b60006040820190506128a26000830185611b73565b81810360208301526128b48184612809565b90509392505050565b6000815190506128cc81611973565b92915050565b6000602082840312156128e8576128e761184f565b5b60006128f6848285016128bd565b91505092915050565b60006040820190506129146000830185611a52565b6129216020830184611c95565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061296282611969565b915061296d83611969565b92508261297d5761297c612928565b5b828204905092915050565b600061299382611969565b915061299e83611969565b92508282039050818111156129b6576129b5611fe5565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6129e581611969565b82525050565b60006129f783836129dc565b60208301905092915050565b6000602082019050919050565b612a19816129bc565b612a2381846129c7565b9250612a2e826129d2565b8060005b83811015612a5f578151612a4687826129eb565b9650612a5183612a03565b925050600181019050612a32565b505050505050565b6000819050919050565b6000612a8c612a87612a8284612a67565b61217a565b611969565b9050919050565b612a9c81612a71565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612ac982612aa2565b612ad38185612aad565b9350612ae3818560208601611c15565b612aec81611c3f565b840191505092915050565b600061014082019050612b0d600083018b611a52565b612b1a602083018a611a52565b612b276040830189612a10565b612b346080830188612a10565b612b4160c0830187612a93565b612b4e60e0830186611c95565b612b5c610100830185611c95565b818103610120830152612b6f8184612abe565b90509998505050505050505050565b6000606082019050612b936000830186611a52565b612ba06020830185611a52565b612bad6040830184611c95565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b6000612bff8385611c04565b9350612c0c838584612be4565b612c1583611c3f565b840190509392505050565b600060c0820190508181036000830152612c3b81898b612bf3565b9050612c4a6020830188611a52565b612c576040830187611a52565b612c646060830186611a52565b612c716080830185611c95565b81810360a0830152612c838184612abe565b905098975050505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ced603183611c04565b9150612cf882612c91565b604082019050919050565b60006020820190508181036000830152612d1c81612ce0565b9050919050565b50565b6000612d33600083612aad565b9150612d3e82612d23565b600082019050919050565b600061014082019050612d5f600083018a611a52565b612d6c6020830189611a52565b612d796040830188612a10565b612d866080830187612a10565b612d9360c0830186612a93565b612da060e0830185611c95565b612dae610100830184611c95565b818103610120830152612dc081612d26565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612e2a603383611c04565b9150612e3582612dce565b604082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612e96601a83611c04565b9150612ea182612e60565b602082019050919050565b60006020820190508181036000830152612ec581612e89565b9050919050565b6000612ed782611969565b9150612ee283611969565b925082612ef257612ef1612928565b5b82820690509291505056fea26469706673582212204c359738a467812497163464f5e1f28e6c0c5a2db952b6ddfee3c9de752e862d64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100f35760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102e8578063cf37625614610313578063d5a44f8614610351578063d76b679414610392576100f3565b806399ad6c561461024f578063a035b1fe1461026b578063b4e6a1d514610296578063b5b20c00146102bf576100f3565b80638150d507116100c65780638150d50714610191578063815a0572146101ba57806381d12c58146101e3578063854b6a4f14610226576100f3565b80630d0271d6146100f8578063216ed6ad146101145780635b5cf6d41461013d5780635badbe4c14610166575b600080fd5b610112600480360381019061010d91906118be565b6103bd565b005b34801561012057600080fd5b5061013b6004803603810190610136919061199f565b6104ab565b005b34801561014957600080fd5b50610164600480360381019061015f91906119f2565b6105be565b005b34801561017257600080fd5b5061017b610779565b6040516101889190611a61565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611a7c565b61077f565b005b3480156101c657600080fd5b506101e160048036038101906101dc9190611aff565b610a0d565b005b3480156101ef57600080fd5b5061020a60048036038101906102059190611a7c565b610a4a565b60405161021d9796959493929190611ca4565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190611d4d565b610bd6565b005b61026960048036038101906102649190611daf565b610f83565b005b34801561027757600080fd5b506102806110df565b60405161028d9190611a61565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611e23565b6110e5565b005b3480156102cb57600080fd5b506102e660048036038101906102e19190611ebd565b6113ee565b005b3480156102f457600080fd5b506102fd6115b5565b60405161030a9190611a61565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190611a7c565b6115bb565b604051610348929190611efd565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190611a7c565b6115df565b604051610389959493929190611f26565b60405180910390f35b34801561039e57600080fd5b506103a761164f565b6040516103b49190611a61565b60405180910390f35b600154341015610402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f990611fc5565b60405180910390fd5b60006007600081548092919061041790612014565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061048982611655565b816003018190555083838260040191826104a49291906122a2565b5050505050565b600082116104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e5906123be565b60405180910390fd5b60006005600081548092919061050390612014565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261057891906123de565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105af9190611a61565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105e9576105e8611b82565b5b8160020160009054906101000a900460ff16600381111561060d5761060c611b82565b5b1461064d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106449061245e565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906124f0565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561072257610721611b82565b5b0217905550838383600501918261073a9291906122a2565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161076a9190611a61565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612582565b60405180910390fd5b8060020154421161086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612614565b60405180910390fd5b8060030160019054906101000a900460ff16156108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612680565b60405180910390fd5b8060030160009054906101000a900460ff1615610912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090990612712565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161098e929190612732565b6020604051808303816000875af11580156109ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d19190612770565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610a019190611a61565b60405180910390a15050565b60008282810190610a1e9190611a7c565b905060006002600083815260200190815260200160002090508060000154600181905550505050505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610ab2906120c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade906120c5565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b505050505090806005018054610b40906120c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906120c5565b8015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c0157610c00611b82565b5b8160020160009054906101000a900460ff166003811115610c2557610c24611b82565b5b14610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906127e9565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610ca857610ca7611b82565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d4d92919061288d565b6020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9091906128d2565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610dc39291906128ff565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610e1a9190612957565b8660010154610e299190612988565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610e709190611a61565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610ea2989796959493929190612af7565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906128d2565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610f4993929190612b7e565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f9890612014565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9bde1603487878760006003811061101157611010612bb5565b5b60200201358860016003811061102a57611029612bb5565b5b60200201358960026003811061104357611042612bb5565b5b602002013560018a60405160200161105b9190611a61565b6040516020818303038152906040526040518963ffffffff1660e01b815260040161108c9796959493929190612c20565b60206040518083038185885af11580156110aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110cf91906128d2565b8160010181905550505050505050565b60015481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90612d03565b60405180910390fd5b600082828101906111849190611a7c565b905060006006600083815260200190815260200160002090508715806111a8575086155b1561122f578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a83600101546111fc9190612957565b9081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050506113e6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016112b392919061288d565b6020604051808303816000875af11580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f691906128d2565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546113459190612957565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161139e9796959493929190612d49565b60206040518083038185885af11580156113bc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113e191906128d2565b505050505b505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90612e40565b60405180910390fd5b8060030160019054906101000a900460ff16156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090612680565b60405180910390fd5b8060030160009054906101000a900460ff161561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290612712565b60405180910390fd5b806002015442111561156057814261155391906123de565b8160020181905550611579565b81816002015461157091906123de565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516115a89190611a61565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b600061165f6116d4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516116c6929190611efd565b60405180910390a150919050565b60008060005b60055481101561175b576004600082815260200190815260200160002060030160009054906101000a900460ff1661174e576004600082815260200190815260200160002060020154421161174e5760046000828152602001908152602001600020600101548261174b91906123de565b91505b80806001019150506116da565b506000811161179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612eac565b60405180910390fd5b600081446117ad9190612ecc565b9050600080600090505b600554811015611848576004600082815260200190815260200160002060030160009054906101000a900460ff1661183b576004600082815260200190815260200160002060020154421161183b5760046000828152602001908152602001600020600101548261182891906123de565b91508282111561183a57809450611848565b5b80806001019150506117b7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261187e5761187d611859565b5b8235905067ffffffffffffffff81111561189b5761189a61185e565b5b6020830191508360018202830111156118b7576118b6611863565b5b9250929050565b600080602083850312156118d5576118d461184f565b5b600083013567ffffffffffffffff8111156118f3576118f2611854565b5b6118ff85828601611868565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119368261190b565b9050919050565b6119468161192b565b811461195157600080fd5b50565b6000813590506119638161193d565b92915050565b6000819050919050565b61197c81611969565b811461198757600080fd5b50565b60008135905061199981611973565b92915050565b6000806000606084860312156119b8576119b761184f565b5b60006119c686828701611954565b93505060206119d78682870161198a565b92505060406119e88682870161198a565b9150509250925092565b600080600060408486031215611a0b57611a0a61184f565b5b6000611a198682870161198a565b935050602084013567ffffffffffffffff811115611a3a57611a39611854565b5b611a4686828701611868565b92509250509250925092565b611a5b81611969565b82525050565b6000602082019050611a766000830184611a52565b92915050565b600060208284031215611a9257611a9161184f565b5b6000611aa08482850161198a565b91505092915050565b60008083601f840112611abf57611abe611859565b5b8235905067ffffffffffffffff811115611adc57611adb61185e565b5b602083019150836001820283011115611af857611af7611863565b5b9250929050565b60008060008060608587031215611b1957611b1861184f565b5b6000611b278782880161198a565b9450506020611b388782880161198a565b935050604085013567ffffffffffffffff811115611b5957611b58611854565b5b611b6587828801611aa9565b925092505092959194509250565b611b7c8161192b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611bc257611bc1611b82565b5b50565b6000819050611bd382611bb1565b919050565b6000611be382611bc5565b9050919050565b611bf381611bd8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c33578082015181840152602081019050611c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5b82611bf9565b611c658185611c04565b9350611c75818560208601611c15565b611c7e81611c3f565b840191505092915050565b60008115159050919050565b611c9e81611c89565b82525050565b600060e082019050611cb9600083018a611b73565b611cc66020830189611a52565b611cd36040830188611bea565b611ce06060830187611a52565b8181036080830152611cf28186611c50565b905081810360a0830152611d068185611c50565b9050611d1560c0830184611c95565b98975050505050505050565b611d2a81611c89565b8114611d3557600080fd5b50565b600081359050611d4781611d21565b92915050565b60008060408385031215611d6457611d6361184f565b5b6000611d728582860161198a565b9250506020611d8385828601611d38565b9150509250929050565b600081905082602060030282011115611da957611da8611863565b5b92915050565b60008060008060a08587031215611dc957611dc861184f565b5b6000611dd78782880161198a565b945050602085013567ffffffffffffffff811115611df857611df7611854565b5b611e0487828801611868565b93509350506040611e1787828801611d8d565b91505092959194509250565b60008060008060008060a08789031215611e4057611e3f61184f565b5b6000611e4e89828a01611d38565b9650506020611e5f89828a01611d38565b9550506040611e7089828a0161198a565b9450506060611e8189828a0161198a565b935050608087013567ffffffffffffffff811115611ea257611ea1611854565b5b611eae89828a01611aa9565b92509250509295509295509295565b60008060408385031215611ed457611ed361184f565b5b6000611ee28582860161198a565b9250506020611ef38582860161198a565b9150509250929050565b6000604082019050611f126000830185611a52565b611f1f6020830184611a52565b9392505050565b600060a082019050611f3b6000830188611b73565b611f486020830187611a52565b611f556040830186611a52565b611f626060830185611c95565b611f6f6080830184611c95565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611faf601083611c04565b9150611fba82611f79565b602082019050919050565b60006020820190508181036000830152611fde81611fa2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061201f82611969565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361205157612050611fe5565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806120dd57607f821691505b6020821081036120f0576120ef612096565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261211b565b612162868361211b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061219f61219a61219584611969565b61217a565b611969565b9050919050565b6000819050919050565b6121b983612184565b6121cd6121c5826121a6565b848454612128565b825550505050565b600090565b6121e26121d5565b6121ed8184846121b0565b505050565b5b81811015612211576122066000826121da565b6001810190506121f3565b5050565b601f82111561225657612227816120f6565b6122308461210b565b8101602085101561223f578190505b61225361224b8561210b565b8301826121f2565b50505b505050565b600082821c905092915050565b60006122796000198460080261225b565b1980831691505092915050565b60006122928383612268565b9150826002028217905092915050565b6122ac838361205c565b67ffffffffffffffff8111156122c5576122c4612067565b5b6122cf82546120c5565b6122da828285612215565b6000601f83116001811461230957600084156122f7578287013590505b6123018582612286565b865550612369565b601f198416612317866120f6565b60005b8281101561233f5784890135825560018201915060208501945060208101905061231a565b8683101561235c5784890135612358601f891682612268565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006123a8601183611c04565b91506123b382612372565b602082019050919050565b600060208201905081810360008301526123d78161239b565b9050919050565b60006123e982611969565b91506123f483611969565b925082820190508082111561240c5761240b611fe5565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612448601883611c04565b915061245382612412565b602082019050919050565b600060208201905081810360008301526124778161243b565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006124da603a83611c04565b91506124e58261247e565b604082019050919050565b60006020820190508181036000830152612509816124cd565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061256c603483611c04565b915061257782612510565b604082019050919050565b6000602082019050818103600083015261259b8161255f565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006125fe602283611c04565b9150612609826125a2565b604082019050919050565b6000602082019050818103600083015261262d816125f1565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061266a602083611c04565b915061267582612634565b602082019050919050565b600060208201905081810360008301526126998161265d565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006126fc602483611c04565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b60006040820190506127476000830185611b73565b6127546020830184611a52565b9392505050565b60008151905061276a81611d21565b92915050565b6000602082840312156127865761278561184f565b5b60006127948482850161275b565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006127d3602083611c04565b91506127de8261279d565b602082019050919050565b60006020820190508181036000830152612802816127c6565b9050919050565b60008154612816816120c5565b6128208186611c04565b9450600182166000811461283b576001811461285157612884565b60ff198316865281151560200286019350612884565b61285a856120f6565b60005b8381101561287c5781548189015260018201915060208101905061285d565b808801955050505b50505092915050565b60006040820190506128a26000830185611b73565b81810360208301526128b48184612809565b90509392505050565b6000815190506128cc81611973565b92915050565b6000602082840312156128e8576128e761184f565b5b60006128f6848285016128bd565b91505092915050565b60006040820190506129146000830185611a52565b6129216020830184611c95565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061296282611969565b915061296d83611969565b92508261297d5761297c612928565b5b828204905092915050565b600061299382611969565b915061299e83611969565b92508282039050818111156129b6576129b5611fe5565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6129e581611969565b82525050565b60006129f783836129dc565b60208301905092915050565b6000602082019050919050565b612a19816129bc565b612a2381846129c7565b9250612a2e826129d2565b8060005b83811015612a5f578151612a4687826129eb565b9650612a5183612a03565b925050600181019050612a32565b505050505050565b6000819050919050565b6000612a8c612a87612a8284612a67565b61217a565b611969565b9050919050565b612a9c81612a71565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612ac982612aa2565b612ad38185612aad565b9350612ae3818560208601611c15565b612aec81611c3f565b840191505092915050565b600061014082019050612b0d600083018b611a52565b612b1a602083018a611a52565b612b276040830189612a10565b612b346080830188612a10565b612b4160c0830187612a93565b612b4e60e0830186611c95565b612b5c610100830185611c95565b818103610120830152612b6f8184612abe565b90509998505050505050505050565b6000606082019050612b936000830186611a52565b612ba06020830185611a52565b612bad6040830184611c95565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b6000612bff8385611c04565b9350612c0c838584612be4565b612c1583611c3f565b840190509392505050565b600060c0820190508181036000830152612c3b81898b612bf3565b9050612c4a6020830188611a52565b612c576040830187611a52565b612c646060830186611a52565b612c716080830185611c95565b81810360a0830152612c838184612abe565b905098975050505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ced603183611c04565b9150612cf882612c91565b604082019050919050565b60006020820190508181036000830152612d1c81612ce0565b9050919050565b50565b6000612d33600083612aad565b9150612d3e82612d23565b600082019050919050565b600061014082019050612d5f600083018a611a52565b612d6c6020830189611a52565b612d796040830188612a10565b612d866080830187612a10565b612d9360c0830186612a93565b612da060e0830185611c95565b612dae610100830184611c95565b818103610120830152612dc081612d26565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612e2a603383611c04565b9150612e3582612dce565b604082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612e96601a83611c04565b9150612ea182612e60565b602082019050919050565b60006020820190508181036000830152612ec581612e89565b9050919050565b6000612ed782611969565b9150612ee283611969565b925082612ef257612ef1612928565b5b82820690509291505056fea26469706673582212204c359738a467812497163464f5e1f28e6c0c5a2db952b6ddfee3c9de752e862d64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Proposals.json b/client/src/assets/Proposals.json index 6e34f93..4416a6a 100644 --- a/client/src/assets/Proposals.json +++ b/client/src/assets/Proposals.json @@ -274,6 +274,16 @@ "internalType": "uint256", "name": "attestationTotal", "type": "uint256" + }, + { + "internalType": "bool", + "name": "callbackOnValidate", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" } ], "stateMutability": "view", @@ -300,6 +310,16 @@ "internalType": "uint256", "name": "referendum100Duration", "type": "uint256" + }, + { + "internalType": "bool", + "name": "callbackOnValidate", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" } ], "name": "propose", @@ -327,8 +347,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162002d4238038062002d428339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051612883620004bf60003960008181610287015281816107650152818161094f01528181610b450152818161131b01526114e901526128836000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d514610159578063c019faab14610182578063da35c664146101ab578063ea923e63146101d65761007b565b8063013cf08b146100805780635d4d2047146100c357806362d26ed7146100f3578063a3bb24cc14610130575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906117cc565b610213565b6040516100ba97969594939291906118c0565b60405180910390f35b6100dd60048036038101906100d89190611994565b610282565b6040516100ea9190611a1c565b60405180910390f35b3480156100ff57600080fd5b5061011a600480360381019061011591906117cc565b610429565b6040516101279190611c28565b60405180910390f35b34801561013c57600080fd5b5061015760048036038101906101529190611c44565b610762565b005b34801561016557600080fd5b50610180600480360381019061017b9190611d06565b61094d565b005b34801561018e57600080fd5b506101a960048036038101906101a491906117cc565b611156565b005b3480156101b757600080fd5b506101c0611282565b6040516101cd9190611a1c565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f891906117cc565b611288565b60405161020a9190611daf565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060070154905087565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692403389896040518463ffffffff1660e01b81526004016102e293929190611e28565b6020604051808303816000875af1158015610301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103259190611e6f565b90506001600081548092919061033a90611ecb565b9190505591506000806000848152602001908152602001600020905081816003018190555042816004018190555085816008016000600381106103805761037f611f13565b5b601102016000018190555084816008016001600381106103a3576103a2611f13565b5b601102016000018190555083816008016002600381106103c6576103c5611f13565b5b6011020160000181905550348160010181905550806001015481600201819055507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516104169190611a1c565b60405180910390a1505095945050505050565b6104316116ed565b600080600084815260200190815260200160002090508060080160006003811061045e5761045d611f13565b5b60110201600101600380602002604051908101604052809291906000905b8282101561052e578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061047c565b505050508260006003811061054657610545611f13565b5b60200201819052508060080160016003811061056557610564611f13565b5b60110201600101600380602002604051908101604052809291906000905b82821015610635578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610583565b505050508260016003811061064d5761064c611f13565b5b60200201819052508060080160026003811061066c5761066b611f13565b5b60110201600101600380602002604051908101604052809291906000905b8282101561073c578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061068a565b505050508260026003811061075457610753611f13565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016107bc9190611f42565b602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611e6f565b101561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590611fcf565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160070160008282546108a99190611fef565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508181600701600082825461090a9190612023565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516109409190611a1c565b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906120c9565b60405180910390fd5b600080600084848101906109ef91906120e9565b925092509250600080600085815260200190815260200160002090506000816008018460038110610a2357610a22611f13565b5b601102019050600081600101826010015460038110610a4557610a44611f13565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508981600201819055508881600301819055508a8160040160016101000a81548160ff0219169083151502179055508b8160040160006101000a81548160ff0219169083151502179055508a610b415760048360050160006101000a81548160ff02191690836005811115610adf57610ade611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610b139190612188565b60405180910390a183836002016000828254610b2f9190612023565b9250508190555050505050505061114e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd29190611e6f565b8a8c610bde9190612023565b6002610bea91906121b6565b1015905060016005811115610c0257610c01611849565b5b8460050160009054906101000a900460ff166005811115610c2657610c25611849565b5b03610d475760008614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590612244565b60405180910390fd5b8c8015610c785750805b15610caf5760028460050160006101000a81548160ff02191690836005811115610ca557610ca4611849565b5b0217905550610d42565b6002836010015410610d245760048460050160006101000a81548160ff02191690836005811115610ce357610ce2611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610d1791906122b0565b60405180910390a1610d41565b6001836010016000828254610d399190612023565b925050819055505b5b61102e565b60026005811115610d5b57610d5a611849565b5b8460050160009054906101000a900460ff166005811115610d7f57610d7e611849565b5b03610ea05760018614610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe9061232a565b60405180910390fd5b8c8015610dd15750805b15610e085760038460050160006101000a81548160ff02191690836005811115610dfe57610dfd611849565b5b0217905550610e9b565b6002836010015410610e7d5760048460050160006101000a81548160ff02191690836005811115610e3c57610e3b611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e7091906122b0565b60405180910390a1610e9a565b6001836010016000828254610e929190612023565b925050819055505b5b61102d565b60036005811115610eb457610eb3611849565b5b8460050160009054906101000a900460ff166005811115610ed857610ed7611849565b5b0361102c5760028614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790612396565b60405180910390fd5b8c8015610f2a5750805b15610f985760058460050160006101000a81548160ff02191690836005811115610f5757610f56611849565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f8b9190611a1c565b60405180910390a161102b565b600283601001541061100d5760048460050160006101000a81548160ff02191690836005811115610fcc57610fcb611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161100091906122b0565b60405180910390a161102a565b60018360100160008282546110229190612023565b925050819055505b5b5b5b5b6001600581111561104257611041611849565b5b8460050160009054906101000a900460ff16600581111561106657611065611849565b5b0361108c57611087876000600a876001015461108291906123e5565b6114b4565b611146565b600260058111156110a05761109f611849565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611849565b5b036110ea576110e5876001600a87600101546110e091906123e5565b6114b4565b611145565b600360058111156110fe576110fd611849565b5b8460050160009054906101000a900460ff16600581111561112257611121611849565b5b0361114457611143876002600a876001015461113e91906123e5565b6114b4565b5b5b5b505050505050505b505050505050565b60008060008381526020019081526020016000209050600460058111156111805761117f611849565b5b8160050160009054906101000a900460ff1660058111156111a4576111a3611849565b5b14806111e457506005808111156111be576111bd611849565b5b8160050160009054906101000a900460ff1660058111156111e2576111e1611849565b5b145b611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a906124ae565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561127c573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156112b3576112b2611849565b5b8160050160009054906101000a900460ff1660058111156112d7576112d6611849565b5b14611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612540565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190611e6f565b8260070154600a6113b991906121b6565b1015905060006301e1338083600401546113d39190612023565b421190508161145e5780156114525760048360050160006101000a81548160ff0219169083600581111561140a57611409611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161143e91906125d2565b60405180910390a1600093505050506114af565b600093505050506114af565b60018360050160006101000a81548160ff0219169083600581111561148657611485611849565b5b02179055506114a7856000600a86600101546114a291906123e5565b6114b4565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546114de9190611fef565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061153f5761153e611f13565b5b60110201600001546006896003811061155b5761155a611f13565b5b60020201600c8a6003811061157357611572611f13565b5b6002020160028b6003811061158b5761158a611f13565b5b015460058c600381106115a1576115a0611f13565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016115ce93929190612600565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161160098979695949392919061279d565b60206040518083038185885af115801561161e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116439190611e6f565b9050600082600801856003811061165d5761165c611f13565b5b60110201905060008160010182601001546003811061167f5761167e611f13565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c67347987846040516116dc929190612824565b60405180910390a150505050505050565b60405180606001604052806003905b61170461171a565b8152602001906001900390816116fc5790505090565b60405180606001604052806003905b611731611747565b8152602001906001900390816117295790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6117a981611796565b81146117b457600080fd5b50565b6000813590506117c6816117a0565b92915050565b6000602082840312156117e2576117e161178c565b5b60006117f0848285016117b7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611824826117f9565b9050919050565b61183481611819565b82525050565b61184381611796565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061188957611888611849565b5b50565b600081905061189a82611878565b919050565b60006118aa8261188c565b9050919050565b6118ba8161189f565b82525050565b600060e0820190506118d5600083018a61182b565b6118e2602083018961183a565b6118ef604083018861183a565b6118fc606083018761183a565b611909608083018661183a565b61191660a08301856118b1565b61192360c083018461183a565b98975050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119545761195361192f565b5b8235905067ffffffffffffffff81111561197157611970611934565b5b60208301915083600182028301111561198d5761198c611939565b5b9250929050565b6000806000806000608086880312156119b0576119af61178c565b5b600086013567ffffffffffffffff8111156119ce576119cd611791565b5b6119da8882890161193e565b955095505060206119ed888289016117b7565b93505060406119fe888289016117b7565b9250506060611a0f888289016117b7565b9150509295509295909350565b6000602082019050611a31600083018461183a565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611a8081611796565b82525050565b60008115159050919050565b611a9b81611a86565b82525050565b60e082016000820151611ab76000850182611a77565b506020820151611aca6020850182611a92565b506040820151611add6040850182611a92565b506060820151611af06060850182611a77565b506080820151611b036080850182611a77565b5060a0820151611b1660a0850182611a92565b5060c0820151611b2960c0850182611a92565b50505050565b6000611b3b8383611aa1565b60e08301905092915050565b6000602082019050919050565b611b5d81611a57565b611b678184611a62565b9250611b7282611a6d565b8060005b83811015611ba3578151611b8a8782611b2f565b9650611b9583611b47565b925050600181019050611b76565b505050505050565b6000611bb78383611b54565b6102a08301905092915050565b6000602082019050919050565b611bda81611a37565b611be48184611a42565b9250611bef82611a4d565b8060005b83811015611c20578151611c078782611bab565b9650611c1283611bc4565b925050600181019050611bf3565b505050505050565b60006107e082019050611c3e6000830184611bd1565b92915050565b60008060408385031215611c5b57611c5a61178c565b5b6000611c69858286016117b7565b9250506020611c7a858286016117b7565b9150509250929050565b611c8d81611a86565b8114611c9857600080fd5b50565b600081359050611caa81611c84565b92915050565b60008083601f840112611cc657611cc561192f565b5b8235905067ffffffffffffffff811115611ce357611ce2611934565b5b602083019150836001820283011115611cff57611cfe611939565b5b9250929050565b60008060008060008060a08789031215611d2357611d2261178c565b5b6000611d3189828a01611c9b565b9650506020611d4289828a01611c9b565b9550506040611d5389828a016117b7565b9450506060611d6489828a016117b7565b935050608087013567ffffffffffffffff811115611d8557611d84611791565b5b611d9189828a01611cb0565b92509250509295509295509295565b611da981611a86565b82525050565b6000602082019050611dc46000830184611da0565b92915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611e078385611dca565b9350611e14838584611ddb565b611e1d83611dea565b840190509392505050565b6000604082019050611e3d600083018661182b565b8181036020830152611e50818486611dfb565b9050949350505050565b600081519050611e69816117a0565b92915050565b600060208284031215611e8557611e8461178c565b5b6000611e9384828501611e5a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ed682611796565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f0857611f07611e9c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082019050611f57600083018461182b565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb9602383611dca565b9150611fc482611f5d565b604082019050919050565b60006020820190508181036000830152611fe881611fac565b9050919050565b6000611ffa82611796565b915061200583611796565b925082820390508181111561201d5761201c611e9c565b5b92915050565b600061202e82611796565b915061203983611796565b925082820190508082111561205157612050611e9c565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006120b3603183611dca565b91506120be82612057565b604082019050919050565b600060208201905081810360008301526120e2816120a6565b9050919050565b6000806000606084860312156121025761210161178c565b5b6000612110868287016117b7565b9350506020612121868287016117b7565b9250506040612132868287016117b7565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612172600e83611dca565b915061217d8261213c565b602082019050919050565b600060408201905061219d600083018461183a565b81810360208301526121ae81612165565b905092915050565b60006121c182611796565b91506121cc83611796565b92508282026121da81611796565b915082820484148315176121f1576121f0611e9c565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b600061222e601683611dca565b9150612239826121f8565b602082019050919050565b6000602082019050818103600083015261225d81612221565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b600061229a601483611dca565b91506122a582612264565b602082019050919050565b60006040820190506122c5600083018461183a565b81810360208301526122d68161228d565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612314601683611dca565b915061231f826122de565b602082019050919050565b6000602082019050818103600083015261234381612307565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612380601683611dca565b915061238b8261234a565b602082019050919050565b600060208201905081810360008301526123af81612373565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006123f082611796565b91506123fb83611796565b92508261240b5761240a6123b6565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612498604e83611dca565b91506124a382612416565b606082019050919050565b600060208201905081810360008301526124c78161248b565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b600061252a602b83611dca565b9150612535826124ce565b604082019050919050565b600060208201905081810360008301526125598161251d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b60006125bc602d83611dca565b91506125c782612560565b604082019050919050565b60006040820190506125e7600083018461183a565b81810360208301526125f8816125af565b905092915050565b6000606082019050612615600083018661183a565b612622602083018561183a565b61262f604083018461183a565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006126638383611a77565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006126996126948361266f565b61267c565b9050919050565b60006126ac8254612686565b9050919050565b6000600182019050919050565b6126c981612637565b6126d38184612642565b92506126de8261264d565b8060005b83811015612716576126f3826126a0565b6126fd8782612657565b9650612708836126b3565b9250506001810190506126e2565b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561275857808201518184015260208101905061273d565b60008484015250505050565b600061276f8261271e565b6127798185612729565b935061278981856020860161273a565b61279281611dea565b840191505092915050565b6000610140820190506127b3600083018b61183a565b6127c0602083018a61183a565b6127cd60408301896126c0565b6127da60808301886126c0565b6127e760c083018761183a565b6127f460e0830186611da0565b612802610100830185611da0565b8181036101208301526128158184612764565b90509998505050505050505050565b6000604082019050612839600083018561183a565b612846602083018461183a565b939250505056fea2646970667358221220ec4f823911481f390b6b85c1c4463eb2492ec0d5c0ddbaa176beab714e247f2a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d514610159578063c019faab14610182578063da35c664146101ab578063ea923e63146101d65761007b565b8063013cf08b146100805780635d4d2047146100c357806362d26ed7146100f3578063a3bb24cc14610130575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906117cc565b610213565b6040516100ba97969594939291906118c0565b60405180910390f35b6100dd60048036038101906100d89190611994565b610282565b6040516100ea9190611a1c565b60405180910390f35b3480156100ff57600080fd5b5061011a600480360381019061011591906117cc565b610429565b6040516101279190611c28565b60405180910390f35b34801561013c57600080fd5b5061015760048036038101906101529190611c44565b610762565b005b34801561016557600080fd5b50610180600480360381019061017b9190611d06565b61094d565b005b34801561018e57600080fd5b506101a960048036038101906101a491906117cc565b611156565b005b3480156101b757600080fd5b506101c0611282565b6040516101cd9190611a1c565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f891906117cc565b611288565b60405161020a9190611daf565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060070154905087565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692403389896040518463ffffffff1660e01b81526004016102e293929190611e28565b6020604051808303816000875af1158015610301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103259190611e6f565b90506001600081548092919061033a90611ecb565b9190505591506000806000848152602001908152602001600020905081816003018190555042816004018190555085816008016000600381106103805761037f611f13565b5b601102016000018190555084816008016001600381106103a3576103a2611f13565b5b601102016000018190555083816008016002600381106103c6576103c5611f13565b5b6011020160000181905550348160010181905550806001015481600201819055507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516104169190611a1c565b60405180910390a1505095945050505050565b6104316116ed565b600080600084815260200190815260200160002090508060080160006003811061045e5761045d611f13565b5b60110201600101600380602002604051908101604052809291906000905b8282101561052e578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061047c565b505050508260006003811061054657610545611f13565b5b60200201819052508060080160016003811061056557610564611f13565b5b60110201600101600380602002604051908101604052809291906000905b82821015610635578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610583565b505050508260016003811061064d5761064c611f13565b5b60200201819052508060080160026003811061066c5761066b611f13565b5b60110201600101600380602002604051908101604052809291906000905b8282101561073c578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061068a565b505050508260026003811061075457610753611f13565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016107bc9190611f42565b602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611e6f565b101561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590611fcf565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160070160008282546108a99190611fef565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508181600701600082825461090a9190612023565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516109409190611a1c565b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906120c9565b60405180910390fd5b600080600084848101906109ef91906120e9565b925092509250600080600085815260200190815260200160002090506000816008018460038110610a2357610a22611f13565b5b601102019050600081600101826010015460038110610a4557610a44611f13565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508981600201819055508881600301819055508a8160040160016101000a81548160ff0219169083151502179055508b8160040160006101000a81548160ff0219169083151502179055508a610b415760048360050160006101000a81548160ff02191690836005811115610adf57610ade611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610b139190612188565b60405180910390a183836002016000828254610b2f9190612023565b9250508190555050505050505061114e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd29190611e6f565b8a8c610bde9190612023565b6002610bea91906121b6565b1015905060016005811115610c0257610c01611849565b5b8460050160009054906101000a900460ff166005811115610c2657610c25611849565b5b03610d475760008614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590612244565b60405180910390fd5b8c8015610c785750805b15610caf5760028460050160006101000a81548160ff02191690836005811115610ca557610ca4611849565b5b0217905550610d42565b6002836010015410610d245760048460050160006101000a81548160ff02191690836005811115610ce357610ce2611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610d1791906122b0565b60405180910390a1610d41565b6001836010016000828254610d399190612023565b925050819055505b5b61102e565b60026005811115610d5b57610d5a611849565b5b8460050160009054906101000a900460ff166005811115610d7f57610d7e611849565b5b03610ea05760018614610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe9061232a565b60405180910390fd5b8c8015610dd15750805b15610e085760038460050160006101000a81548160ff02191690836005811115610dfe57610dfd611849565b5b0217905550610e9b565b6002836010015410610e7d5760048460050160006101000a81548160ff02191690836005811115610e3c57610e3b611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e7091906122b0565b60405180910390a1610e9a565b6001836010016000828254610e929190612023565b925050819055505b5b61102d565b60036005811115610eb457610eb3611849565b5b8460050160009054906101000a900460ff166005811115610ed857610ed7611849565b5b0361102c5760028614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790612396565b60405180910390fd5b8c8015610f2a5750805b15610f985760058460050160006101000a81548160ff02191690836005811115610f5757610f56611849565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f8b9190611a1c565b60405180910390a161102b565b600283601001541061100d5760048460050160006101000a81548160ff02191690836005811115610fcc57610fcb611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161100091906122b0565b60405180910390a161102a565b60018360100160008282546110229190612023565b925050819055505b5b5b5b5b6001600581111561104257611041611849565b5b8460050160009054906101000a900460ff16600581111561106657611065611849565b5b0361108c57611087876000600a876001015461108291906123e5565b6114b4565b611146565b600260058111156110a05761109f611849565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611849565b5b036110ea576110e5876001600a87600101546110e091906123e5565b6114b4565b611145565b600360058111156110fe576110fd611849565b5b8460050160009054906101000a900460ff16600581111561112257611121611849565b5b0361114457611143876002600a876001015461113e91906123e5565b6114b4565b5b5b5b505050505050505b505050505050565b60008060008381526020019081526020016000209050600460058111156111805761117f611849565b5b8160050160009054906101000a900460ff1660058111156111a4576111a3611849565b5b14806111e457506005808111156111be576111bd611849565b5b8160050160009054906101000a900460ff1660058111156111e2576111e1611849565b5b145b611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a906124ae565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561127c573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156112b3576112b2611849565b5b8160050160009054906101000a900460ff1660058111156112d7576112d6611849565b5b14611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612540565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190611e6f565b8260070154600a6113b991906121b6565b1015905060006301e1338083600401546113d39190612023565b421190508161145e5780156114525760048360050160006101000a81548160ff0219169083600581111561140a57611409611849565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161143e91906125d2565b60405180910390a1600093505050506114af565b600093505050506114af565b60018360050160006101000a81548160ff0219169083600581111561148657611485611849565b5b02179055506114a7856000600a86600101546114a291906123e5565b6114b4565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546114de9190611fef565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061153f5761153e611f13565b5b60110201600001546006896003811061155b5761155a611f13565b5b60020201600c8a6003811061157357611572611f13565b5b6002020160028b6003811061158b5761158a611f13565b5b015460058c600381106115a1576115a0611f13565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016115ce93929190612600565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161160098979695949392919061279d565b60206040518083038185885af115801561161e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116439190611e6f565b9050600082600801856003811061165d5761165c611f13565b5b60110201905060008160010182601001546003811061167f5761167e611f13565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c67347987846040516116dc929190612824565b60405180910390a150505050505050565b60405180606001604052806003905b61170461171a565b8152602001906001900390816116fc5790505090565b60405180606001604052806003905b611731611747565b8152602001906001900390816117295790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6117a981611796565b81146117b457600080fd5b50565b6000813590506117c6816117a0565b92915050565b6000602082840312156117e2576117e161178c565b5b60006117f0848285016117b7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611824826117f9565b9050919050565b61183481611819565b82525050565b61184381611796565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061188957611888611849565b5b50565b600081905061189a82611878565b919050565b60006118aa8261188c565b9050919050565b6118ba8161189f565b82525050565b600060e0820190506118d5600083018a61182b565b6118e2602083018961183a565b6118ef604083018861183a565b6118fc606083018761183a565b611909608083018661183a565b61191660a08301856118b1565b61192360c083018461183a565b98975050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119545761195361192f565b5b8235905067ffffffffffffffff81111561197157611970611934565b5b60208301915083600182028301111561198d5761198c611939565b5b9250929050565b6000806000806000608086880312156119b0576119af61178c565b5b600086013567ffffffffffffffff8111156119ce576119cd611791565b5b6119da8882890161193e565b955095505060206119ed888289016117b7565b93505060406119fe888289016117b7565b9250506060611a0f888289016117b7565b9150509295509295909350565b6000602082019050611a31600083018461183a565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611a8081611796565b82525050565b60008115159050919050565b611a9b81611a86565b82525050565b60e082016000820151611ab76000850182611a77565b506020820151611aca6020850182611a92565b506040820151611add6040850182611a92565b506060820151611af06060850182611a77565b506080820151611b036080850182611a77565b5060a0820151611b1660a0850182611a92565b5060c0820151611b2960c0850182611a92565b50505050565b6000611b3b8383611aa1565b60e08301905092915050565b6000602082019050919050565b611b5d81611a57565b611b678184611a62565b9250611b7282611a6d565b8060005b83811015611ba3578151611b8a8782611b2f565b9650611b9583611b47565b925050600181019050611b76565b505050505050565b6000611bb78383611b54565b6102a08301905092915050565b6000602082019050919050565b611bda81611a37565b611be48184611a42565b9250611bef82611a4d565b8060005b83811015611c20578151611c078782611bab565b9650611c1283611bc4565b925050600181019050611bf3565b505050505050565b60006107e082019050611c3e6000830184611bd1565b92915050565b60008060408385031215611c5b57611c5a61178c565b5b6000611c69858286016117b7565b9250506020611c7a858286016117b7565b9150509250929050565b611c8d81611a86565b8114611c9857600080fd5b50565b600081359050611caa81611c84565b92915050565b60008083601f840112611cc657611cc561192f565b5b8235905067ffffffffffffffff811115611ce357611ce2611934565b5b602083019150836001820283011115611cff57611cfe611939565b5b9250929050565b60008060008060008060a08789031215611d2357611d2261178c565b5b6000611d3189828a01611c9b565b9650506020611d4289828a01611c9b565b9550506040611d5389828a016117b7565b9450506060611d6489828a016117b7565b935050608087013567ffffffffffffffff811115611d8557611d84611791565b5b611d9189828a01611cb0565b92509250509295509295509295565b611da981611a86565b82525050565b6000602082019050611dc46000830184611da0565b92915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611e078385611dca565b9350611e14838584611ddb565b611e1d83611dea565b840190509392505050565b6000604082019050611e3d600083018661182b565b8181036020830152611e50818486611dfb565b9050949350505050565b600081519050611e69816117a0565b92915050565b600060208284031215611e8557611e8461178c565b5b6000611e9384828501611e5a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ed682611796565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f0857611f07611e9c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082019050611f57600083018461182b565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb9602383611dca565b9150611fc482611f5d565b604082019050919050565b60006020820190508181036000830152611fe881611fac565b9050919050565b6000611ffa82611796565b915061200583611796565b925082820390508181111561201d5761201c611e9c565b5b92915050565b600061202e82611796565b915061203983611796565b925082820190508082111561205157612050611e9c565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006120b3603183611dca565b91506120be82612057565b604082019050919050565b600060208201905081810360008301526120e2816120a6565b9050919050565b6000806000606084860312156121025761210161178c565b5b6000612110868287016117b7565b9350506020612121868287016117b7565b9250506040612132868287016117b7565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612172600e83611dca565b915061217d8261213c565b602082019050919050565b600060408201905061219d600083018461183a565b81810360208301526121ae81612165565b905092915050565b60006121c182611796565b91506121cc83611796565b92508282026121da81611796565b915082820484148315176121f1576121f0611e9c565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b600061222e601683611dca565b9150612239826121f8565b602082019050919050565b6000602082019050818103600083015261225d81612221565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b600061229a601483611dca565b91506122a582612264565b602082019050919050565b60006040820190506122c5600083018461183a565b81810360208301526122d68161228d565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612314601683611dca565b915061231f826122de565b602082019050919050565b6000602082019050818103600083015261234381612307565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612380601683611dca565b915061238b8261234a565b602082019050919050565b600060208201905081810360008301526123af81612373565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006123f082611796565b91506123fb83611796565b92508261240b5761240a6123b6565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612498604e83611dca565b91506124a382612416565b606082019050919050565b600060208201905081810360008301526124c78161248b565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b600061252a602b83611dca565b9150612535826124ce565b604082019050919050565b600060208201905081810360008301526125598161251d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b60006125bc602d83611dca565b91506125c782612560565b604082019050919050565b60006040820190506125e7600083018461183a565b81810360208301526125f8816125af565b905092915050565b6000606082019050612615600083018661183a565b612622602083018561183a565b61262f604083018461183a565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006126638383611a77565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006126996126948361266f565b61267c565b9050919050565b60006126ac8254612686565b9050919050565b6000600182019050919050565b6126c981612637565b6126d38184612642565b92506126de8261264d565b8060005b83811015612716576126f3826126a0565b6126fd8782612657565b9650612708836126b3565b9250506001810190506126e2565b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561275857808201518184015260208101905061273d565b60008484015250505050565b600061276f8261271e565b6127798185612729565b935061278981856020860161273a565b61279281611dea565b840191505092915050565b6000610140820190506127b3600083018b61183a565b6127c0602083018a61183a565b6127cd60408301896126c0565b6127da60808301886126c0565b6127e760c083018761183a565b6127f460e0830186611da0565b612802610100830185611da0565b8181036101208301526128158184612764565b90509998505050505050505050565b6000604082019050612839600083018561183a565b612846602083018461183a565b939250505056fea2646970667358221220ec4f823911481f390b6b85c1c4463eb2492ec0d5c0ddbaa176beab714e247f2a64736f6c63430008180033", + "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b506040516200373b3803806200373b8339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b60805161327c620004bf600039600081816106610152818161084b01528181610a41015281816112b5015281816115230152611826015261327c6000f3fe60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610154578063c9bde1601461017d578063da35c664146101ad578063ea923e63146101d85761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b63565b610215565b6040516100bc99989796959493929190611d02565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e79190611b63565b610325565b6040516100f99190611f7b565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611f97565b61065e565b005b34801561013757600080fd5b50610152600480360381019061014d9190612068565b610849565b005b34801561016057600080fd5b5061017b60048036038101906101769190611b63565b611184565b005b61019760048036038101906101929190612158565b6112b0565b6040516101a49190612227565b60405180910390f35b3480156101b957600080fd5b506101c261148a565b6040516101cf9190612227565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190611b63565b611490565b60405161020c9190612242565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102a29061228c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ce9061228c565b801561031b5780601f106102f05761010080835404028352916020019161031b565b820191906000526020600020905b8154815290600101906020018083116102fe57829003601f168201915b5050505050905089565b61032d611a70565b600080600084815260200190815260200160002090508060080160006003811061035a576103596122bd565b5b60110201600101600380602002604051908101604052809291906000905b8282101561042a578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610378565b5050505082600060038110610442576104416122bd565b5b602002018190525080600801600160038110610461576104606122bd565b5b60110201600101600380602002604051908101604052809291906000905b82821015610531578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061047f565b5050505082600160038110610549576105486122bd565b5b602002018190525080600801600260038110610568576105676122bd565b5b60110201600101600380602002604051908101604052809291906000905b82821015610638578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610586565b50505050826002600381106106505761064f6122bd565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016106b891906122ec565b602060405180830381865afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f9919061231c565b101561073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610731906123cc565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160070160008282546107a5919061241b565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610806919061244f565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb8360405161083c9190612227565b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce906124f5565b60405180910390fd5b600080600084848101906108eb9190612515565b92509250925060008060008581526020019081526020016000209050600081600801846003811061091f5761091e6122bd565b5b601102019050600081600101826010015460038110610941576109406122bd565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508981600201819055508881600301819055508a8160040160016101000a81548160ff0219169083151502179055508b8160040160006101000a81548160ff0219169083151502179055508a610a3d5760048360050160006101000a81548160ff021916908360058111156109db576109da611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610a0f91906125b4565b60405180910390a183836002016000828254610a2b919061244f565b9250508190555050505050505061117c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace919061231c565b8a8c610ada919061244f565b6002610ae691906125e2565b1015905060016005811115610afe57610afd611be0565b5b8460050160009054906101000a900460ff166005811115610b2257610b21611be0565b5b03610c435760008614610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190612670565b60405180910390fd5b8c8015610b745750805b15610bab5760028460050160006101000a81548160ff02191690836005811115610ba157610ba0611be0565b5b0217905550610c3e565b6002836010015410610c205760048460050160006101000a81548160ff02191690836005811115610bdf57610bde611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610c1391906126dc565b60405180910390a1610c3d565b6001836010016000828254610c35919061244f565b925050819055505b5b61105c565b60026005811115610c5757610c56611be0565b5b8460050160009054906101000a900460ff166005811115610c7b57610c7a611be0565b5b03610d9c5760018614610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612756565b60405180910390fd5b8c8015610ccd5750805b15610d045760038460050160006101000a81548160ff02191690836005811115610cfa57610cf9611be0565b5b0217905550610d97565b6002836010015410610d795760048460050160006101000a81548160ff02191690836005811115610d3857610d37611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610d6c91906126dc565b60405180910390a1610d96565b6001836010016000828254610d8e919061244f565b925050819055505b5b61105b565b60036005811115610db057610daf611be0565b5b8460050160009054906101000a900460ff166005811115610dd457610dd3611be0565b5b0361105a5760028614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e13906127c2565b60405180910390fd5b8c8015610e265750805b15610fc65760058460050160006101000a81548160ff02191690836005811115610e5357610e52611be0565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610e879190612227565b60405180910390a183603b0160009054906101000a900460ff1615610fc1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58e60008e8e89603c016040518663ffffffff1660e01b8152600401610f0f95949392919061287b565b600060405180830381600087803b158015610f2957600080fd5b505af1925050508015610f3a575060015b610f9e57610f466128e2565b806308c379a003610f8d5750610f5a612964565b80610f655750610f8f565b610f8760405180606001604052806023815260200161320160239139826116bc565b50610f99565b505b3d6000803e3d6000fd5b610fc0565b610fbf60405180606001604052806023815260200161322460239139611758565b5b5b611059565b600283601001541061103b5760048460050160006101000a81548160ff02191690836005811115610ffa57610ff9611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161102e91906126dc565b60405180910390a1611058565b6001836010016000828254611050919061244f565b925050819055505b5b5b5b5b600160058111156110705761106f611be0565b5b8460050160009054906101000a900460ff16600581111561109457611093611be0565b5b036110ba576110b5876000600a87600101546110b09190612a23565b6117f1565b611174565b600260058111156110ce576110cd611be0565b5b8460050160009054906101000a900460ff1660058111156110f2576110f1611be0565b5b0361111857611113876001600a876001015461110e9190612a23565b6117f1565b611173565b6003600581111561112c5761112b611be0565b5b8460050160009054906101000a900460ff1660058111156111505761114f611be0565b5b0361117257611171876002600a876001015461116c9190612a23565b6117f1565b5b5b5b505050505050505b505050505050565b60008060008381526020019081526020016000209050600460058111156111ae576111ad611be0565b5b8160050160009054906101000a900460ff1660058111156111d2576111d1611be0565b5b148061121257506005808111156111ec576111eb611be0565b5b8160050160009054906101000a900460ff1660058111156112105761120f611be0565b5b145b611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890612aec565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112aa573d6000803e3d6000fd5b50505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff869240338c8c6040518463ffffffff1660e01b815260040161131093929190612b48565b6020604051808303816000875af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611353919061231c565b90506001600081548092919061136890612b7a565b9190505591506000806000848152602001908152602001600020905081816003018190555042816004018190555088816008016000600381106113ae576113ad6122bd565b5b601102016000018190555087816008016001600381106113d1576113d06122bd565b5b601102016000018190555086816008016002600381106113f4576113f36122bd565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c019182611444929190612d64565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516114749190612227565b60405180910390a1505098975050505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114bb576114ba611be0565b5b8160050160009054906101000a900460ff1660058111156114df576114de611be0565b5b1461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690612ea6565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b0919061231c565b8260070154600a6115c191906125e2565b1015905060006301e1338083600401546115db919061244f565b421190508161166657801561165a5760048360050160006101000a81548160ff0219169083600581111561161257611611611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116469190612f38565b60405180910390a1600093505050506116b7565b600093505050506116b7565b60018360050160006101000a81548160ff0219169083600581111561168e5761168d611be0565b5b02179055506116af856000600a86600101546116aa9190612a23565b6117f1565b600193505050505b919050565b61175482826040516024016116d2929190612faa565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611a2a565b5050565b6117ee8160405160240161176c9190612fe1565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611a2a565b50565b600080600085815260200190815260200160002090508181600201600082825461181b919061241b565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061187c5761187b6122bd565b5b601102016000015460068960038110611898576118976122bd565b5b60020201600c8a600381106118b0576118af6122bd565b5b6002020160028b600381106118c8576118c76122bd565b5b015460058c600381106118de576118dd6122bd565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161190b93929190613003565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161193d989796959493929190613121565b60206040518083038185885af115801561195b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611980919061231c565b9050600082600801856003811061199a576119996122bd565b5b6011020190506000816001018260100154600381106119bc576119bb6122bd565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a199291906131a8565b60405180910390a150505050505050565b611a4181611a39611a44611a65565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611a9d819050919050565b60405180606001604052806003905b611a87611aa7565b815260200190600190039081611a7f5790505090565b611aa56131d1565b565b60405180606001604052806003905b611abe611ad4565b815260200190600190039081611ab65790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611b4081611b2d565b8114611b4b57600080fd5b50565b600081359050611b5d81611b37565b92915050565b600060208284031215611b7957611b78611b23565b5b6000611b8784828501611b4e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbb82611b90565b9050919050565b611bcb81611bb0565b82525050565b611bda81611b2d565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611c2057611c1f611be0565b5b50565b6000819050611c3182611c0f565b919050565b6000611c4182611c23565b9050919050565b611c5181611c36565b82525050565b60008115159050919050565b611c6c81611c57565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cac578082015181840152602081019050611c91565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd482611c72565b611cde8185611c7d565b9350611cee818560208601611c8e565b611cf781611cb8565b840191505092915050565b600061012082019050611d18600083018c611bc2565b611d25602083018b611bd1565b611d32604083018a611bd1565b611d3f6060830189611bd1565b611d4c6080830188611bd1565b611d5960a0830187611c48565b611d6660c0830186611bd1565b611d7360e0830185611c63565b818103610100830152611d868184611cc9565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611ddf81611b2d565b82525050565b611dee81611c57565b82525050565b60e082016000820151611e0a6000850182611dd6565b506020820151611e1d6020850182611de5565b506040820151611e306040850182611de5565b506060820151611e436060850182611dd6565b506080820151611e566080850182611dd6565b5060a0820151611e6960a0850182611de5565b5060c0820151611e7c60c0850182611de5565b50505050565b6000611e8e8383611df4565b60e08301905092915050565b6000602082019050919050565b611eb081611db6565b611eba8184611dc1565b9250611ec582611dcc565b8060005b83811015611ef6578151611edd8782611e82565b9650611ee883611e9a565b925050600181019050611ec9565b505050505050565b6000611f0a8383611ea7565b6102a08301905092915050565b6000602082019050919050565b611f2d81611d96565b611f378184611da1565b9250611f4282611dac565b8060005b83811015611f73578151611f5a8782611efe565b9650611f6583611f17565b925050600181019050611f46565b505050505050565b60006107e082019050611f916000830184611f24565b92915050565b60008060408385031215611fae57611fad611b23565b5b6000611fbc85828601611b4e565b9250506020611fcd85828601611b4e565b9150509250929050565b611fe081611c57565b8114611feb57600080fd5b50565b600081359050611ffd81611fd7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261202857612027612003565b5b8235905067ffffffffffffffff81111561204557612044612008565b5b6020830191508360018202830111156120615761206061200d565b5b9250929050565b60008060008060008060a0878903121561208557612084611b23565b5b600061209389828a01611fee565b96505060206120a489828a01611fee565b95505060406120b589828a01611b4e565b94505060606120c689828a01611b4e565b935050608087013567ffffffffffffffff8111156120e7576120e6611b28565b5b6120f389828a01612012565b92509250509295509295509295565b60008083601f84011261211857612117612003565b5b8235905067ffffffffffffffff81111561213557612134612008565b5b6020830191508360018202830111156121515761215061200d565b5b9250929050565b60008060008060008060008060c0898b03121561217857612177611b23565b5b600089013567ffffffffffffffff81111561219657612195611b28565b5b6121a28b828c01612102565b985098505060206121b58b828c01611b4e565b96505060406121c68b828c01611b4e565b95505060606121d78b828c01611b4e565b94505060806121e88b828c01611fee565b93505060a089013567ffffffffffffffff81111561220957612208611b28565b5b6122158b828c01612012565b92509250509295985092959890939650565b600060208201905061223c6000830184611bd1565b92915050565b60006020820190506122576000830184611c63565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122a457607f821691505b6020821081036122b7576122b661225d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506123016000830184611bc2565b92915050565b60008151905061231681611b37565b92915050565b60006020828403121561233257612331611b23565b5b600061234084828501612307565b91505092915050565b600082825260208201905092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006123b6602383612349565b91506123c18261235a565b604082019050919050565b600060208201905081810360008301526123e5816123a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061242682611b2d565b915061243183611b2d565b9250828203905081811115612449576124486123ec565b5b92915050565b600061245a82611b2d565b915061246583611b2d565b925082820190508082111561247d5761247c6123ec565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006124df603183612349565b91506124ea82612483565b604082019050919050565b6000602082019050818103600083015261250e816124d2565b9050919050565b60008060006060848603121561252e5761252d611b23565b5b600061253c86828701611b4e565b935050602061254d86828701611b4e565b925050604061255e86828701611b4e565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b600061259e600e83612349565b91506125a982612568565b602082019050919050565b60006040820190506125c96000830184611bd1565b81810360208301526125da81612591565b905092915050565b60006125ed82611b2d565b91506125f883611b2d565b925082820261260681611b2d565b9150828204841483151761261d5761261c6123ec565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b600061265a601683612349565b915061266582612624565b602082019050919050565b600060208201905081810360008301526126898161264d565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006126c6601483612349565b91506126d182612690565b602082019050919050565b60006040820190506126f16000830184611bd1565b8181036020830152612702816126b9565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612740601683612349565b915061274b8261270a565b602082019050919050565b6000602082019050818103600083015261276f81612733565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b60006127ac601683612349565b91506127b782612776565b602082019050919050565b600060208201905081810360008301526127db8161279f565b9050919050565b60008190508160005260206000209050919050565b600081546128048161228c565b61280e8186611c7d565b94506001821660008114612829576001811461283f57612872565b60ff198316865281151560200286019350612872565b612848856127e2565b60005b8381101561286a5781548189015260018201915060208101905061284b565b808801955050505b50505092915050565b600060a0820190506128906000830188611c63565b61289d6020830187611c63565b6128aa6040830186611bd1565b6128b76060830185611bd1565b81810360808301526128c981846127f7565b90509695505050505050565b60008160e01c9050919050565b600060033d11156129015760046000803e6128fe6000516128d5565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61293c82611cb8565b810181811067ffffffffffffffff8211171561295b5761295a612904565b5b80604052505050565b600060443d106129f157612976611b19565b60043d036004823e80513d602482011167ffffffffffffffff8211171561299e5750506129f1565b808201805167ffffffffffffffff8111156129bc57505050506129f1565b80602083010160043d0385018111156129d95750505050506129f1565b6129e882602001850186612933565b82955050505050505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a2e82611b2d565b9150612a3983611b2d565b925082612a4957612a486129f4565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ad6604e83612349565b9150612ae182612a54565b606082019050919050565b60006020820190508181036000830152612b0581612ac9565b9050919050565b82818337600083830152505050565b6000612b278385612349565b9350612b34838584612b0c565b612b3d83611cb8565b840190509392505050565b6000604082019050612b5d6000830186611bc2565b8181036020830152612b70818486612b1b565b9050949350505050565b6000612b8582611b2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bb757612bb66123ec565b5b600182019050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bdd565b612c248683612bdd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c61612c5c612c5784611b2d565b612c3c565b611b2d565b9050919050565b6000819050919050565b612c7b83612c46565b612c8f612c8782612c68565b848454612bea565b825550505050565b600090565b612ca4612c97565b612caf818484612c72565b505050565b5b81811015612cd357612cc8600082612c9c565b600181019050612cb5565b5050565b601f821115612d1857612ce9816127e2565b612cf284612bcd565b81016020851015612d01578190505b612d15612d0d85612bcd565b830182612cb4565b50505b505050565b600082821c905092915050565b6000612d3b60001984600802612d1d565b1980831691505092915050565b6000612d548383612d2a565b9150826002028217905092915050565b612d6e8383612bc2565b67ffffffffffffffff811115612d8757612d86612904565b5b612d91825461228c565b612d9c828285612cd7565b6000601f831160018114612dcb5760008415612db9578287013590505b612dc38582612d48565b865550612e2b565b601f198416612dd9866127e2565b60005b82811015612e0157848901358255600182019150602085019450602081019050612ddc565b86831015612e1e5784890135612e1a601f891682612d2a565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612e90602b83612349565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612f22602d83612349565b9150612f2d82612ec6565b604082019050919050565b6000604082019050612f4d6000830184611bd1565b8181036020830152612f5e81612f15565b905092915050565b600081519050919050565b6000612f7c82612f66565b612f868185612349565b9350612f96818560208601611c8e565b612f9f81611cb8565b840191505092915050565b60006040820190508181036000830152612fc48185612f71565b90508181036020830152612fd88184612f71565b90509392505050565b60006020820190508181036000830152612ffb8184612f71565b905092915050565b60006060820190506130186000830186611bd1565b6130256020830185611bd1565b6130326040830184611bd1565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006130668383611dd6565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b600061309c61309783613072565b61307f565b9050919050565b60006130af8254613089565b9050919050565b6000600182019050919050565b6130cc8161303a565b6130d68184613045565b92506130e182613050565b8060005b83811015613119576130f6826130a3565b613100878261305a565b965061310b836130b6565b9250506001810190506130e5565b505050505050565b600061014082019050613137600083018b611bd1565b613144602083018a611bd1565b61315160408301896130c3565b61315e60808301886130c3565b61316b60c0830187611bd1565b61317860e0830186611c63565b613186610100830185611c63565b8181036101208301526131998184611cc9565b90509998505050505050505050565b60006040820190506131bd6000830185611bd1565b6131ca6020830184611bd1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe70726f706f73616c2063616c6c6261636b4f6e56616c6964617465206661696c65643a70726f706f73616c2063616c6c6261636b4f6e56616c69646174652073756363656564a264697066735822122005fe2bc5ff15117c67f59d86dd525198d77b152dec694c0be6b7ef15ef8cad2464736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610154578063c9bde1601461017d578063da35c664146101ad578063ea923e63146101d85761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b63565b610215565b6040516100bc99989796959493929190611d02565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e79190611b63565b610325565b6040516100f99190611f7b565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611f97565b61065e565b005b34801561013757600080fd5b50610152600480360381019061014d9190612068565b610849565b005b34801561016057600080fd5b5061017b60048036038101906101769190611b63565b611184565b005b61019760048036038101906101929190612158565b6112b0565b6040516101a49190612227565b60405180910390f35b3480156101b957600080fd5b506101c261148a565b6040516101cf9190612227565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190611b63565b611490565b60405161020c9190612242565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102a29061228c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ce9061228c565b801561031b5780601f106102f05761010080835404028352916020019161031b565b820191906000526020600020905b8154815290600101906020018083116102fe57829003601f168201915b5050505050905089565b61032d611a70565b600080600084815260200190815260200160002090508060080160006003811061035a576103596122bd565b5b60110201600101600380602002604051908101604052809291906000905b8282101561042a578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610378565b5050505082600060038110610442576104416122bd565b5b602002018190525080600801600160038110610461576104606122bd565b5b60110201600101600380602002604051908101604052809291906000905b82821015610531578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061047f565b5050505082600160038110610549576105486122bd565b5b602002018190525080600801600260038110610568576105676122bd565b5b60110201600101600380602002604051908101604052809291906000905b82821015610638578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610586565b50505050826002600381106106505761064f6122bd565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016106b891906122ec565b602060405180830381865afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f9919061231c565b101561073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610731906123cc565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160070160008282546107a5919061241b565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610806919061244f565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb8360405161083c9190612227565b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce906124f5565b60405180910390fd5b600080600084848101906108eb9190612515565b92509250925060008060008581526020019081526020016000209050600081600801846003811061091f5761091e6122bd565b5b601102019050600081600101826010015460038110610941576109406122bd565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508981600201819055508881600301819055508a8160040160016101000a81548160ff0219169083151502179055508b8160040160006101000a81548160ff0219169083151502179055508a610a3d5760048360050160006101000a81548160ff021916908360058111156109db576109da611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610a0f91906125b4565b60405180910390a183836002016000828254610a2b919061244f565b9250508190555050505050505061117c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace919061231c565b8a8c610ada919061244f565b6002610ae691906125e2565b1015905060016005811115610afe57610afd611be0565b5b8460050160009054906101000a900460ff166005811115610b2257610b21611be0565b5b03610c435760008614610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190612670565b60405180910390fd5b8c8015610b745750805b15610bab5760028460050160006101000a81548160ff02191690836005811115610ba157610ba0611be0565b5b0217905550610c3e565b6002836010015410610c205760048460050160006101000a81548160ff02191690836005811115610bdf57610bde611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610c1391906126dc565b60405180910390a1610c3d565b6001836010016000828254610c35919061244f565b925050819055505b5b61105c565b60026005811115610c5757610c56611be0565b5b8460050160009054906101000a900460ff166005811115610c7b57610c7a611be0565b5b03610d9c5760018614610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612756565b60405180910390fd5b8c8015610ccd5750805b15610d045760038460050160006101000a81548160ff02191690836005811115610cfa57610cf9611be0565b5b0217905550610d97565b6002836010015410610d795760048460050160006101000a81548160ff02191690836005811115610d3857610d37611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610d6c91906126dc565b60405180910390a1610d96565b6001836010016000828254610d8e919061244f565b925050819055505b5b61105b565b60036005811115610db057610daf611be0565b5b8460050160009054906101000a900460ff166005811115610dd457610dd3611be0565b5b0361105a5760028614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e13906127c2565b60405180910390fd5b8c8015610e265750805b15610fc65760058460050160006101000a81548160ff02191690836005811115610e5357610e52611be0565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610e879190612227565b60405180910390a183603b0160009054906101000a900460ff1615610fc1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58e60008e8e89603c016040518663ffffffff1660e01b8152600401610f0f95949392919061287b565b600060405180830381600087803b158015610f2957600080fd5b505af1925050508015610f3a575060015b610f9e57610f466128e2565b806308c379a003610f8d5750610f5a612964565b80610f655750610f8f565b610f8760405180606001604052806023815260200161320160239139826116bc565b50610f99565b505b3d6000803e3d6000fd5b610fc0565b610fbf60405180606001604052806023815260200161322460239139611758565b5b5b611059565b600283601001541061103b5760048460050160006101000a81548160ff02191690836005811115610ffa57610ff9611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161102e91906126dc565b60405180910390a1611058565b6001836010016000828254611050919061244f565b925050819055505b5b5b5b5b600160058111156110705761106f611be0565b5b8460050160009054906101000a900460ff16600581111561109457611093611be0565b5b036110ba576110b5876000600a87600101546110b09190612a23565b6117f1565b611174565b600260058111156110ce576110cd611be0565b5b8460050160009054906101000a900460ff1660058111156110f2576110f1611be0565b5b0361111857611113876001600a876001015461110e9190612a23565b6117f1565b611173565b6003600581111561112c5761112b611be0565b5b8460050160009054906101000a900460ff1660058111156111505761114f611be0565b5b0361117257611171876002600a876001015461116c9190612a23565b6117f1565b5b5b5b505050505050505b505050505050565b60008060008381526020019081526020016000209050600460058111156111ae576111ad611be0565b5b8160050160009054906101000a900460ff1660058111156111d2576111d1611be0565b5b148061121257506005808111156111ec576111eb611be0565b5b8160050160009054906101000a900460ff1660058111156112105761120f611be0565b5b145b611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890612aec565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112aa573d6000803e3d6000fd5b50505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff869240338c8c6040518463ffffffff1660e01b815260040161131093929190612b48565b6020604051808303816000875af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611353919061231c565b90506001600081548092919061136890612b7a565b9190505591506000806000848152602001908152602001600020905081816003018190555042816004018190555088816008016000600381106113ae576113ad6122bd565b5b601102016000018190555087816008016001600381106113d1576113d06122bd565b5b601102016000018190555086816008016002600381106113f4576113f36122bd565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c019182611444929190612d64565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516114749190612227565b60405180910390a1505098975050505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114bb576114ba611be0565b5b8160050160009054906101000a900460ff1660058111156114df576114de611be0565b5b1461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690612ea6565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b0919061231c565b8260070154600a6115c191906125e2565b1015905060006301e1338083600401546115db919061244f565b421190508161166657801561165a5760048360050160006101000a81548160ff0219169083600581111561161257611611611be0565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116469190612f38565b60405180910390a1600093505050506116b7565b600093505050506116b7565b60018360050160006101000a81548160ff0219169083600581111561168e5761168d611be0565b5b02179055506116af856000600a86600101546116aa9190612a23565b6117f1565b600193505050505b919050565b61175482826040516024016116d2929190612faa565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611a2a565b5050565b6117ee8160405160240161176c9190612fe1565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611a2a565b50565b600080600085815260200190815260200160002090508181600201600082825461181b919061241b565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061187c5761187b6122bd565b5b601102016000015460068960038110611898576118976122bd565b5b60020201600c8a600381106118b0576118af6122bd565b5b6002020160028b600381106118c8576118c76122bd565b5b015460058c600381106118de576118dd6122bd565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161190b93929190613003565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161193d989796959493929190613121565b60206040518083038185885af115801561195b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611980919061231c565b9050600082600801856003811061199a576119996122bd565b5b6011020190506000816001018260100154600381106119bc576119bb6122bd565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a199291906131a8565b60405180910390a150505050505050565b611a4181611a39611a44611a65565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611a9d819050919050565b60405180606001604052806003905b611a87611aa7565b815260200190600190039081611a7f5790505090565b611aa56131d1565b565b60405180606001604052806003905b611abe611ad4565b815260200190600190039081611ab65790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611b4081611b2d565b8114611b4b57600080fd5b50565b600081359050611b5d81611b37565b92915050565b600060208284031215611b7957611b78611b23565b5b6000611b8784828501611b4e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbb82611b90565b9050919050565b611bcb81611bb0565b82525050565b611bda81611b2d565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611c2057611c1f611be0565b5b50565b6000819050611c3182611c0f565b919050565b6000611c4182611c23565b9050919050565b611c5181611c36565b82525050565b60008115159050919050565b611c6c81611c57565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cac578082015181840152602081019050611c91565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd482611c72565b611cde8185611c7d565b9350611cee818560208601611c8e565b611cf781611cb8565b840191505092915050565b600061012082019050611d18600083018c611bc2565b611d25602083018b611bd1565b611d32604083018a611bd1565b611d3f6060830189611bd1565b611d4c6080830188611bd1565b611d5960a0830187611c48565b611d6660c0830186611bd1565b611d7360e0830185611c63565b818103610100830152611d868184611cc9565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611ddf81611b2d565b82525050565b611dee81611c57565b82525050565b60e082016000820151611e0a6000850182611dd6565b506020820151611e1d6020850182611de5565b506040820151611e306040850182611de5565b506060820151611e436060850182611dd6565b506080820151611e566080850182611dd6565b5060a0820151611e6960a0850182611de5565b5060c0820151611e7c60c0850182611de5565b50505050565b6000611e8e8383611df4565b60e08301905092915050565b6000602082019050919050565b611eb081611db6565b611eba8184611dc1565b9250611ec582611dcc565b8060005b83811015611ef6578151611edd8782611e82565b9650611ee883611e9a565b925050600181019050611ec9565b505050505050565b6000611f0a8383611ea7565b6102a08301905092915050565b6000602082019050919050565b611f2d81611d96565b611f378184611da1565b9250611f4282611dac565b8060005b83811015611f73578151611f5a8782611efe565b9650611f6583611f17565b925050600181019050611f46565b505050505050565b60006107e082019050611f916000830184611f24565b92915050565b60008060408385031215611fae57611fad611b23565b5b6000611fbc85828601611b4e565b9250506020611fcd85828601611b4e565b9150509250929050565b611fe081611c57565b8114611feb57600080fd5b50565b600081359050611ffd81611fd7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261202857612027612003565b5b8235905067ffffffffffffffff81111561204557612044612008565b5b6020830191508360018202830111156120615761206061200d565b5b9250929050565b60008060008060008060a0878903121561208557612084611b23565b5b600061209389828a01611fee565b96505060206120a489828a01611fee565b95505060406120b589828a01611b4e565b94505060606120c689828a01611b4e565b935050608087013567ffffffffffffffff8111156120e7576120e6611b28565b5b6120f389828a01612012565b92509250509295509295509295565b60008083601f84011261211857612117612003565b5b8235905067ffffffffffffffff81111561213557612134612008565b5b6020830191508360018202830111156121515761215061200d565b5b9250929050565b60008060008060008060008060c0898b03121561217857612177611b23565b5b600089013567ffffffffffffffff81111561219657612195611b28565b5b6121a28b828c01612102565b985098505060206121b58b828c01611b4e565b96505060406121c68b828c01611b4e565b95505060606121d78b828c01611b4e565b94505060806121e88b828c01611fee565b93505060a089013567ffffffffffffffff81111561220957612208611b28565b5b6122158b828c01612012565b92509250509295985092959890939650565b600060208201905061223c6000830184611bd1565b92915050565b60006020820190506122576000830184611c63565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122a457607f821691505b6020821081036122b7576122b661225d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506123016000830184611bc2565b92915050565b60008151905061231681611b37565b92915050565b60006020828403121561233257612331611b23565b5b600061234084828501612307565b91505092915050565b600082825260208201905092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006123b6602383612349565b91506123c18261235a565b604082019050919050565b600060208201905081810360008301526123e5816123a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061242682611b2d565b915061243183611b2d565b9250828203905081811115612449576124486123ec565b5b92915050565b600061245a82611b2d565b915061246583611b2d565b925082820190508082111561247d5761247c6123ec565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006124df603183612349565b91506124ea82612483565b604082019050919050565b6000602082019050818103600083015261250e816124d2565b9050919050565b60008060006060848603121561252e5761252d611b23565b5b600061253c86828701611b4e565b935050602061254d86828701611b4e565b925050604061255e86828701611b4e565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b600061259e600e83612349565b91506125a982612568565b602082019050919050565b60006040820190506125c96000830184611bd1565b81810360208301526125da81612591565b905092915050565b60006125ed82611b2d565b91506125f883611b2d565b925082820261260681611b2d565b9150828204841483151761261d5761261c6123ec565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b600061265a601683612349565b915061266582612624565b602082019050919050565b600060208201905081810360008301526126898161264d565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006126c6601483612349565b91506126d182612690565b602082019050919050565b60006040820190506126f16000830184611bd1565b8181036020830152612702816126b9565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612740601683612349565b915061274b8261270a565b602082019050919050565b6000602082019050818103600083015261276f81612733565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b60006127ac601683612349565b91506127b782612776565b602082019050919050565b600060208201905081810360008301526127db8161279f565b9050919050565b60008190508160005260206000209050919050565b600081546128048161228c565b61280e8186611c7d565b94506001821660008114612829576001811461283f57612872565b60ff198316865281151560200286019350612872565b612848856127e2565b60005b8381101561286a5781548189015260018201915060208101905061284b565b808801955050505b50505092915050565b600060a0820190506128906000830188611c63565b61289d6020830187611c63565b6128aa6040830186611bd1565b6128b76060830185611bd1565b81810360808301526128c981846127f7565b90509695505050505050565b60008160e01c9050919050565b600060033d11156129015760046000803e6128fe6000516128d5565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61293c82611cb8565b810181811067ffffffffffffffff8211171561295b5761295a612904565b5b80604052505050565b600060443d106129f157612976611b19565b60043d036004823e80513d602482011167ffffffffffffffff8211171561299e5750506129f1565b808201805167ffffffffffffffff8111156129bc57505050506129f1565b80602083010160043d0385018111156129d95750505050506129f1565b6129e882602001850186612933565b82955050505050505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a2e82611b2d565b9150612a3983611b2d565b925082612a4957612a486129f4565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ad6604e83612349565b9150612ae182612a54565b606082019050919050565b60006020820190508181036000830152612b0581612ac9565b9050919050565b82818337600083830152505050565b6000612b278385612349565b9350612b34838584612b0c565b612b3d83611cb8565b840190509392505050565b6000604082019050612b5d6000830186611bc2565b8181036020830152612b70818486612b1b565b9050949350505050565b6000612b8582611b2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bb757612bb66123ec565b5b600182019050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bdd565b612c248683612bdd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c61612c5c612c5784611b2d565b612c3c565b611b2d565b9050919050565b6000819050919050565b612c7b83612c46565b612c8f612c8782612c68565b848454612bea565b825550505050565b600090565b612ca4612c97565b612caf818484612c72565b505050565b5b81811015612cd357612cc8600082612c9c565b600181019050612cb5565b5050565b601f821115612d1857612ce9816127e2565b612cf284612bcd565b81016020851015612d01578190505b612d15612d0d85612bcd565b830182612cb4565b50505b505050565b600082821c905092915050565b6000612d3b60001984600802612d1d565b1980831691505092915050565b6000612d548383612d2a565b9150826002028217905092915050565b612d6e8383612bc2565b67ffffffffffffffff811115612d8757612d86612904565b5b612d91825461228c565b612d9c828285612cd7565b6000601f831160018114612dcb5760008415612db9578287013590505b612dc38582612d48565b865550612e2b565b601f198416612dd9866127e2565b60005b82811015612e0157848901358255600182019150602085019450602081019050612ddc565b86831015612e1e5784890135612e1a601f891682612d2a565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612e90602b83612349565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612f22602d83612349565b9150612f2d82612ec6565b604082019050919050565b6000604082019050612f4d6000830184611bd1565b8181036020830152612f5e81612f15565b905092915050565b600081519050919050565b6000612f7c82612f66565b612f868185612349565b9350612f96818560208601611c8e565b612f9f81611cb8565b840191505092915050565b60006040820190508181036000830152612fc48185612f71565b90508181036020830152612fd88184612f71565b90509392505050565b60006020820190508181036000830152612ffb8184612f71565b905092915050565b60006060820190506130186000830186611bd1565b6130256020830185611bd1565b6130326040830184611bd1565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006130668383611dd6565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b600061309c61309783613072565b61307f565b9050919050565b60006130af8254613089565b9050919050565b6000600182019050919050565b6130cc8161303a565b6130d68184613045565b92506130e182613050565b8060005b83811015613119576130f6826130a3565b613100878261305a565b965061310b836130b6565b9250506001810190506130e5565b505050505050565b600061014082019050613137600083018b611bd1565b613144602083018a611bd1565b61315160408301896130c3565b61315e60808301886130c3565b61316b60c0830187611bd1565b61317860e0830186611c63565b613186610100830185611c63565b8181036101208301526131998184611cc9565b90509998505050505050505050565b60006040820190506131bd6000830185611bd1565b6131ca6020830184611bd1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe70726f706f73616c2063616c6c6261636b4f6e56616c6964617465206661696c65643a70726f706f73616c2063616c6c6261636b4f6e56616c69646174652073756363656564a264697066735822122005fe2bc5ff15117c67f59d86dd525198d77b152dec694c0be6b7ef15ef8cad2464736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index 6935b7d..ff50965 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -10,6 +10,11 @@ "name": "dao_", "type": "address" }, + { + "internalType": "contract Proposals", + "name": "proposals_", + "type": "address" + }, { "internalType": "uint256", "name": "price_", @@ -124,6 +129,29 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "onProposalAccepted", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "price", @@ -137,6 +165,66 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "priceProposalCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "priceProposals", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "proposalIndex", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "string", + "name": "contentId", + "type": "string" + }, + { + "internalType": "uint256[3]", + "name": "durations", + "type": "uint256[3]" + } + ], + "name": "proposeNewPrice", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { @@ -314,8 +402,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b50604051620026593803806200265983398181016040528101906200003791906200013a565b8181818073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508060a081815250505050505062000181565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b38262000086565b9050919050565b6000620000c782620000a6565b9050919050565b620000d981620000ba565b8114620000e557600080fd5b50565b600081519050620000f981620000ce565b92915050565b6000819050919050565b6200011481620000ff565b81146200012057600080fd5b50565b600081519050620001348162000109565b92915050565b6000806040838503121562000154576200015362000081565b5b60006200016485828601620000e8565b9250506020620001778582860162000123565b9150509250929050565b60805160a051612496620001c3600039600081816102910152610df901526000818161081e01528181610b7c01528181610c7e0152610d5d01526124966000f3fe60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b691906112b9565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df919061139a565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113ed565b6104ad565b005b34801561011b57600080fd5b50610124610667565b604051610131919061145c565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611477565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611477565b6108fa565b60405161019d97969594939291906115d5565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061167e565b610a86565b005b3480156101db57600080fd5b506101e4610df7565b6040516101f1919061145c565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c91906116be565b610e1b565b005b34801561022f57600080fd5b50610238610fe1565b604051610245919061145c565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611477565b610fe7565b6040516102869594939291906116fe565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061179d565b60405180910390fd5b600060036000815480929190610307906117ec565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611057565b81600301819055508383826004019182610394929190611a7a565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b96565b60405180910390fd5b6000600160008154809291906103f3906117ec565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611bb6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e919061145c565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d76114b3565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb6114b3565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c36565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611cc8565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f6114b3565b5b02179055508383836005019182610628929190611a7a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc85604051610658919061145c565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d5a565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611dec565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e58565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eea565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611f0a565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f48565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee919061145c565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040180546109629061189d565b80601f016020809104026020016040519081016040528092919081815260200182805461098e9061189d565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f09061189d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c9061189d565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab06114b3565b5b8160020160009054906101000a900460ff166003811115610ad557610ad46114b3565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611fc1565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b566114b3565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612065565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f91906120aa565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120d7565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610d16979695949392919061221d565b60206040518083038185885af1158015610d34573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d5991906120aa565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610dbd939291906122a2565b600060405180830381600087803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061234b565b60405180910390fd5b8060030160019054906101000a900460ff1615610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90611e58565b60405180910390fd5b8060030160009054906101000a900460ff1615610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90611eea565b60405180910390fd5b8060020154421115610f8c578142610f7f9190611bb6565b8160020181905550610fa5565b818160020154610f9c9190611bb6565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fd4919061145c565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006110616110d5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110c792919061236b565b60405180910390a150919050565b60008060005b6001548110156111595760008082815260200190815260200160002060030160009054906101000a900460ff1661114c5760008082815260200190815260200160002060020154421161114c5760008082815260200190815260200160002060010154826111499190611bb6565b91505b80806001019150506110db565b506000811161119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906123e0565b60405180910390fd5b600081446111ab919061242f565b9050600080600090505b6001548110156112435760008082815260200190815260200160002060030160009054906101000a900460ff16611236576000808281526020019081526020016000206002015442116112365760008082815260200190815260200160002060010154826112239190611bb6565b91508282111561123557809450611243565b5b80806001019150506111b5565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261127957611278611254565b5b8235905067ffffffffffffffff81111561129657611295611259565b5b6020830191508360018202830111156112b2576112b161125e565b5b9250929050565b600080602083850312156112d0576112cf61124a565b5b600083013567ffffffffffffffff8111156112ee576112ed61124f565b5b6112fa85828601611263565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061133182611306565b9050919050565b61134181611326565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b6000819050919050565b61137781611364565b811461138257600080fd5b50565b6000813590506113948161136e565b92915050565b6000806000606084860312156113b3576113b261124a565b5b60006113c18682870161134f565b93505060206113d286828701611385565b92505060406113e386828701611385565b9150509250925092565b6000806000604084860312156114065761140561124a565b5b600061141486828701611385565b935050602084013567ffffffffffffffff8111156114355761143461124f565b5b61144186828701611263565b92509250509250925092565b61145681611364565b82525050565b6000602082019050611471600083018461144d565b92915050565b60006020828403121561148d5761148c61124a565b5b600061149b84828501611385565b91505092915050565b6114ad81611326565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114f3576114f26114b3565b5b50565b6000819050611504826114e2565b919050565b6000611514826114f6565b9050919050565b61152481611509565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611564578082015181840152602081019050611549565b60008484015250505050565b6000601f19601f8301169050919050565b600061158c8261152a565b6115968185611535565b93506115a6818560208601611546565b6115af81611570565b840191505092915050565b60008115159050919050565b6115cf816115ba565b82525050565b600060e0820190506115ea600083018a6114a4565b6115f7602083018961144d565b611604604083018861151b565b611611606083018761144d565b81810360808301526116238186611581565b905081810360a08301526116378185611581565b905061164660c08301846115c6565b98975050505050505050565b61165b816115ba565b811461166657600080fd5b50565b60008135905061167881611652565b92915050565b600080604083850312156116955761169461124a565b5b60006116a385828601611385565b92505060206116b485828601611669565b9150509250929050565b600080604083850312156116d5576116d461124a565b5b60006116e385828601611385565b92505060206116f485828601611385565b9150509250929050565b600060a08201905061171360008301886114a4565b611720602083018761144d565b61172d604083018661144d565b61173a60608301856115c6565b61174760808301846115c6565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611787601083611535565b915061179282611751565b602082019050919050565b600060208201905081810360008301526117b68161177a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117f782611364565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611829576118286117bd565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118b557607f821691505b6020821081036118c8576118c761186e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118f3565b61193a86836118f3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061197761197261196d84611364565b611952565b611364565b9050919050565b6000819050919050565b6119918361195c565b6119a561199d8261197e565b848454611900565b825550505050565b600090565b6119ba6119ad565b6119c5818484611988565b505050565b5b818110156119e9576119de6000826119b2565b6001810190506119cb565b5050565b601f821115611a2e576119ff816118ce565b611a08846118e3565b81016020851015611a17578190505b611a2b611a23856118e3565b8301826119ca565b50505b505050565b600082821c905092915050565b6000611a5160001984600802611a33565b1980831691505092915050565b6000611a6a8383611a40565b9150826002028217905092915050565b611a848383611834565b67ffffffffffffffff811115611a9d57611a9c61183f565b5b611aa7825461189d565b611ab28282856119ed565b6000601f831160018114611ae15760008415611acf578287013590505b611ad98582611a5e565b865550611b41565b601f198416611aef866118ce565b60005b82811015611b1757848901358255600182019150602085019450602081019050611af2565b86831015611b345784890135611b30601f891682611a40565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b80601183611535565b9150611b8b82611b4a565b602082019050919050565b60006020820190508181036000830152611baf81611b73565b9050919050565b6000611bc182611364565b9150611bcc83611364565b9250828201905080821115611be457611be36117bd565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611c20601883611535565b9150611c2b82611bea565b602082019050919050565b60006020820190508181036000830152611c4f81611c13565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611cb2603a83611535565b9150611cbd82611c56565b604082019050919050565b60006020820190508181036000830152611ce181611ca5565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d44603483611535565b9150611d4f82611ce8565b604082019050919050565b60006020820190508181036000830152611d7381611d37565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd6602283611535565b9150611de182611d7a565b604082019050919050565b60006020820190508181036000830152611e0581611dc9565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e42602083611535565b9150611e4d82611e0c565b602082019050919050565b60006020820190508181036000830152611e7181611e35565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ed4602483611535565b9150611edf82611e78565b604082019050919050565b60006020820190508181036000830152611f0381611ec7565b9050919050565b6000604082019050611f1f60008301856114a4565b611f2c602083018461144d565b9392505050565b600081519050611f4281611652565b92915050565b600060208284031215611f5e57611f5d61124a565b5b6000611f6c84828501611f33565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611fab602083611535565b9150611fb682611f75565b602082019050919050565b60006020820190508181036000830152611fda81611f9e565b9050919050565b60008154611fee8161189d565b611ff88186611535565b9450600182166000811461201357600181146120295761205c565b60ff19831686528115156020028601935061205c565b612032856118ce565b60005b8381101561205457815481890152600182019150602081019050612035565b808801955050505b50505092915050565b600060408201905061207a60008301856114a4565b818103602083015261208c8184611fe1565b90509392505050565b6000815190506120a48161136e565b92915050565b6000602082840312156120c0576120bf61124a565b5b60006120ce84828501612095565b91505092915050565b60006040820190506120ec600083018561144d565b6120f960208301846115c6565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61212981611364565b82525050565b600061213b8383612120565b60208301905092915050565b6000602082019050919050565b61215d81612100565b612167818461210b565b925061217282612116565b8060005b838110156121a357815161218a878261212f565b965061219583612147565b925050600181019050612176565b505050505050565b6000819050919050565b60006121d06121cb6121c6846121ab565b611952565b611364565b9050919050565b6121e0816121b5565b82525050565b600082825260208201905092915050565b50565b60006122076000836121e6565b9150612212826121f7565b600082019050919050565b600061014082019050612233600083018a61144d565b612240602083018961144d565b61224d6040830188612154565b61225a6080830187612154565b61226760c08301866121d7565b61227460e08301856115c6565b6122826101008301846115c6565b818103610120830152612294816121fa565b905098975050505050505050565b60006060820190506122b7600083018661144d565b6122c4602083018561144d565b6122d160408301846115c6565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612335603383611535565b9150612340826122d9565b604082019050919050565b6000602082019050818103600083015261236481612328565b9050919050565b6000604082019050612380600083018561144d565b61238d602083018461144d565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006123ca601a83611535565b91506123d582612394565b602082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061243a82611364565b915061244583611364565b92508261245557612454612400565b5b82820690509291505056fea2646970667358221220dafed7c04bb4b6ae3f886aea18f8af52f780fb4c41b353fe710c6f6e33ab238d64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b691906112b9565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df919061139a565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113ed565b6104ad565b005b34801561011b57600080fd5b50610124610667565b604051610131919061145c565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611477565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611477565b6108fa565b60405161019d97969594939291906115d5565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061167e565b610a86565b005b3480156101db57600080fd5b506101e4610df7565b6040516101f1919061145c565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c91906116be565b610e1b565b005b34801561022f57600080fd5b50610238610fe1565b604051610245919061145c565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611477565b610fe7565b6040516102869594939291906116fe565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061179d565b60405180910390fd5b600060036000815480929190610307906117ec565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611057565b81600301819055508383826004019182610394929190611a7a565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b96565b60405180910390fd5b6000600160008154809291906103f3906117ec565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611bb6565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e919061145c565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d76114b3565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb6114b3565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c36565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611cc8565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f6114b3565b5b02179055508383836005019182610628929190611a7a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc85604051610658919061145c565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d5a565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611dec565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e58565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eea565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611f0a565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f48565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee919061145c565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040180546109629061189d565b80601f016020809104026020016040519081016040528092919081815260200182805461098e9061189d565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f09061189d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c9061189d565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab06114b3565b5b8160020160009054906101000a900460ff166003811115610ad557610ad46114b3565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611fc1565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b566114b3565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612065565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f91906120aa565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120d7565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610d16979695949392919061221d565b60206040518083038185885af1158015610d34573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d5991906120aa565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610dbd939291906122a2565b600060405180830381600087803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061234b565b60405180910390fd5b8060030160019054906101000a900460ff1615610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90611e58565b60405180910390fd5b8060030160009054906101000a900460ff1615610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90611eea565b60405180910390fd5b8060020154421115610f8c578142610f7f9190611bb6565b8160020181905550610fa5565b818160020154610f9c9190611bb6565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fd4919061145c565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006110616110d5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110c792919061236b565b60405180910390a150919050565b60008060005b6001548110156111595760008082815260200190815260200160002060030160009054906101000a900460ff1661114c5760008082815260200190815260200160002060020154421161114c5760008082815260200190815260200160002060010154826111499190611bb6565b91505b80806001019150506110db565b506000811161119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906123e0565b60405180910390fd5b600081446111ab919061242f565b9050600080600090505b6001548110156112435760008082815260200190815260200160002060030160009054906101000a900460ff16611236576000808281526020019081526020016000206002015442116112365760008082815260200190815260200160002060010154826112239190611bb6565b91508282111561123557809450611243565b5b80806001019150506111b5565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261127957611278611254565b5b8235905067ffffffffffffffff81111561129657611295611259565b5b6020830191508360018202830111156112b2576112b161125e565b5b9250929050565b600080602083850312156112d0576112cf61124a565b5b600083013567ffffffffffffffff8111156112ee576112ed61124f565b5b6112fa85828601611263565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061133182611306565b9050919050565b61134181611326565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b6000819050919050565b61137781611364565b811461138257600080fd5b50565b6000813590506113948161136e565b92915050565b6000806000606084860312156113b3576113b261124a565b5b60006113c18682870161134f565b93505060206113d286828701611385565b92505060406113e386828701611385565b9150509250925092565b6000806000604084860312156114065761140561124a565b5b600061141486828701611385565b935050602084013567ffffffffffffffff8111156114355761143461124f565b5b61144186828701611263565b92509250509250925092565b61145681611364565b82525050565b6000602082019050611471600083018461144d565b92915050565b60006020828403121561148d5761148c61124a565b5b600061149b84828501611385565b91505092915050565b6114ad81611326565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114f3576114f26114b3565b5b50565b6000819050611504826114e2565b919050565b6000611514826114f6565b9050919050565b61152481611509565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611564578082015181840152602081019050611549565b60008484015250505050565b6000601f19601f8301169050919050565b600061158c8261152a565b6115968185611535565b93506115a6818560208601611546565b6115af81611570565b840191505092915050565b60008115159050919050565b6115cf816115ba565b82525050565b600060e0820190506115ea600083018a6114a4565b6115f7602083018961144d565b611604604083018861151b565b611611606083018761144d565b81810360808301526116238186611581565b905081810360a08301526116378185611581565b905061164660c08301846115c6565b98975050505050505050565b61165b816115ba565b811461166657600080fd5b50565b60008135905061167881611652565b92915050565b600080604083850312156116955761169461124a565b5b60006116a385828601611385565b92505060206116b485828601611669565b9150509250929050565b600080604083850312156116d5576116d461124a565b5b60006116e385828601611385565b92505060206116f485828601611385565b9150509250929050565b600060a08201905061171360008301886114a4565b611720602083018761144d565b61172d604083018661144d565b61173a60608301856115c6565b61174760808301846115c6565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611787601083611535565b915061179282611751565b602082019050919050565b600060208201905081810360008301526117b68161177a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117f782611364565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611829576118286117bd565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118b557607f821691505b6020821081036118c8576118c761186e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118f3565b61193a86836118f3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061197761197261196d84611364565b611952565b611364565b9050919050565b6000819050919050565b6119918361195c565b6119a561199d8261197e565b848454611900565b825550505050565b600090565b6119ba6119ad565b6119c5818484611988565b505050565b5b818110156119e9576119de6000826119b2565b6001810190506119cb565b5050565b601f821115611a2e576119ff816118ce565b611a08846118e3565b81016020851015611a17578190505b611a2b611a23856118e3565b8301826119ca565b50505b505050565b600082821c905092915050565b6000611a5160001984600802611a33565b1980831691505092915050565b6000611a6a8383611a40565b9150826002028217905092915050565b611a848383611834565b67ffffffffffffffff811115611a9d57611a9c61183f565b5b611aa7825461189d565b611ab28282856119ed565b6000601f831160018114611ae15760008415611acf578287013590505b611ad98582611a5e565b865550611b41565b601f198416611aef866118ce565b60005b82811015611b1757848901358255600182019150602085019450602081019050611af2565b86831015611b345784890135611b30601f891682611a40565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b80601183611535565b9150611b8b82611b4a565b602082019050919050565b60006020820190508181036000830152611baf81611b73565b9050919050565b6000611bc182611364565b9150611bcc83611364565b9250828201905080821115611be457611be36117bd565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611c20601883611535565b9150611c2b82611bea565b602082019050919050565b60006020820190508181036000830152611c4f81611c13565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611cb2603a83611535565b9150611cbd82611c56565b604082019050919050565b60006020820190508181036000830152611ce181611ca5565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d44603483611535565b9150611d4f82611ce8565b604082019050919050565b60006020820190508181036000830152611d7381611d37565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd6602283611535565b9150611de182611d7a565b604082019050919050565b60006020820190508181036000830152611e0581611dc9565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e42602083611535565b9150611e4d82611e0c565b602082019050919050565b60006020820190508181036000830152611e7181611e35565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ed4602483611535565b9150611edf82611e78565b604082019050919050565b60006020820190508181036000830152611f0381611ec7565b9050919050565b6000604082019050611f1f60008301856114a4565b611f2c602083018461144d565b9392505050565b600081519050611f4281611652565b92915050565b600060208284031215611f5e57611f5d61124a565b5b6000611f6c84828501611f33565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611fab602083611535565b9150611fb682611f75565b602082019050919050565b60006020820190508181036000830152611fda81611f9e565b9050919050565b60008154611fee8161189d565b611ff88186611535565b9450600182166000811461201357600181146120295761205c565b60ff19831686528115156020028601935061205c565b612032856118ce565b60005b8381101561205457815481890152600182019150602081019050612035565b808801955050505b50505092915050565b600060408201905061207a60008301856114a4565b818103602083015261208c8184611fe1565b90509392505050565b6000815190506120a48161136e565b92915050565b6000602082840312156120c0576120bf61124a565b5b60006120ce84828501612095565b91505092915050565b60006040820190506120ec600083018561144d565b6120f960208301846115c6565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61212981611364565b82525050565b600061213b8383612120565b60208301905092915050565b6000602082019050919050565b61215d81612100565b612167818461210b565b925061217282612116565b8060005b838110156121a357815161218a878261212f565b965061219583612147565b925050600181019050612176565b505050505050565b6000819050919050565b60006121d06121cb6121c6846121ab565b611952565b611364565b9050919050565b6121e0816121b5565b82525050565b600082825260208201905092915050565b50565b60006122076000836121e6565b9150612212826121f7565b600082019050919050565b600061014082019050612233600083018a61144d565b612240602083018961144d565b61224d6040830188612154565b61225a6080830187612154565b61226760c08301866121d7565b61227460e08301856115c6565b6122826101008301846115c6565b818103610120830152612294816121fa565b905098975050505050505050565b60006060820190506122b7600083018661144d565b6122c4602083018561144d565b6122d160408301846115c6565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612335603383611535565b9150612340826122d9565b604082019050919050565b6000602082019050818103600083015261236481612328565b9050919050565b6000604082019050612380600083018561144d565b61238d602083018461144d565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006123ca601a83611535565b91506123d582612394565b602082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061243a82611364565b915061244583611364565b92508261245557612454612400565b5b82820690509291505056fea2646970667358221220dafed7c04bb4b6ae3f886aea18f8af52f780fb4c41b353fe710c6f6e33ab238d64736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002bf138038062002bf18339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516129a36200024e600039600081816108fd01528181610c9901528181610d9b0152610e7a01526129a36000f3fe6080604052600436106100e85760003560e01c8063854b6a4f1161008a578063c4a9e11611610059578063c4a9e116146102b4578063cf376256146102df578063d5a44f861461031d578063d76b67941461035e576100e8565b8063854b6a4f1461021b57806399ad6c5614610244578063a035b1fe14610260578063b5b20c001461028b576100e8565b80635badbe4c116100c65780635badbe4c1461015b5780638150d50714610186578063815a0572146101af57806381d12c58146101d8576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635b5cf6d414610132575b600080fd5b61010760048036038101906101029190611546565b610389565b005b34801561011557600080fd5b50610130600480360381019061012b9190611627565b610477565b005b34801561013e57600080fd5b506101596004803603810190610154919061167a565b61058a565b005b34801561016757600080fd5b50610170610745565b60405161017d91906116e9565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611704565b61074b565b005b3480156101bb57600080fd5b506101d660048036038101906101d19190611787565b6109d9565b005b3480156101e457600080fd5b506101ff60048036038101906101fa9190611704565b610a16565b604051610212979695949392919061192c565b60405180910390f35b34801561022757600080fd5b50610242600480360381019061023d91906119d5565b610ba2565b005b61025e60048036038101906102599190611a37565b610f14565b005b34801561026c57600080fd5b50610275611070565b60405161028291906116e9565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190611aab565b611076565b005b3480156102c057600080fd5b506102c961123d565b6040516102d691906116e9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190611704565b611243565b604051610314929190611aeb565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190611704565b611267565b604051610355959493929190611b14565b60405180910390f35b34801561036a57600080fd5b506103736112d7565b60405161038091906116e9565b60405180910390f35b6001543410156103ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c590611bb3565b60405180910390fd5b6000600760008154809291906103e390611c02565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348160010181905550610455826112dd565b81600301819055508383826004019182610470929190611e90565b5050505050565b600082116104ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b190611fac565b60405180910390fd5b6000600560008154809291906104cf90611c02565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105449190611fcc565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161057b91906116e9565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105b5576105b461180a565b5b8160020160009054906101000a900460ff1660038111156105d9576105d861180a565b5b14610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061204c565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bd906120de565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106ee576106ed61180a565b5b02179055508383836005019182610706929190611e90565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161073691906116e9565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90612170565b60405180910390fd5b8060020154421161083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190612202565b60405180910390fd5b8060030160019054906101000a900460ff161561088c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108839061226e565b60405180910390fd5b8060030160009054906101000a900460ff16156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612300565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161095a929190612320565b6020604051808303816000875af1158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d919061235e565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109cd91906116e9565b60405180910390a15050565b600082828101906109ea9190611704565b905060006002600083815260200190815260200160002090508060000154600181905550505050505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610a7e90611cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa90611cb3565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b505050505090806005018054610b0c90611cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890611cb3565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610bcd57610bcc61180a565b5b8160020160009054906101000a900460ff166003811115610bf157610bf061180a565b5b14610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c28906123d7565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610c7457610c7361180a565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d1992919061247b565b6020604051808303816000875af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c91906124c0565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610d8f9291906124ed565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610e339796959493929190612633565b60206040518083038185885af1158015610e51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7691906124c0565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610eda939291906126b8565b600060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f2990611c02565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9bde16034878787600060038110610fa257610fa16126ef565b5b602002013588600160038110610fbb57610fba6126ef565b5b602002013589600260038110610fd457610fd36126ef565b5b602002013560018a604051602001610fec91906116e9565b6040516020818303038152906040526040518963ffffffff1660e01b815260040161101d979695949392919061279e565b60206040518083038185885af115801561103b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061106091906124c0565b8160010181905550505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612881565b60405180910390fd5b8060030160019054906101000a900460ff1615611171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111689061226e565b60405180910390fd5b8060030160009054906101000a900460ff16156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612300565b60405180910390fd5b80600201544211156111e85781426111db9190611fcc565b8160020181905550611201565b8181600201546111f89190611fcc565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161123091906116e9565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b60006112e761135c565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161134e929190611aeb565b60405180910390a150919050565b60008060005b6005548110156113e3576004600082815260200190815260200160002060030160009054906101000a900460ff166113d657600460008281526020019081526020016000206002015442116113d6576004600082815260200190815260200160002060010154826113d39190611fcc565b91505b8080600101915050611362565b5060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e906128ed565b60405180910390fd5b60008144611435919061293c565b9050600080600090505b6005548110156114d0576004600082815260200190815260200160002060030160009054906101000a900460ff166114c357600460008281526020019081526020016000206002015442116114c3576004600082815260200190815260200160002060010154826114b09190611fcc565b9150828211156114c2578094506114d0565b5b808060010191505061143f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611506576115056114e1565b5b8235905067ffffffffffffffff811115611523576115226114e6565b5b60208301915083600182028301111561153f5761153e6114eb565b5b9250929050565b6000806020838503121561155d5761155c6114d7565b5b600083013567ffffffffffffffff81111561157b5761157a6114dc565b5b611587858286016114f0565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115be82611593565b9050919050565b6115ce816115b3565b81146115d957600080fd5b50565b6000813590506115eb816115c5565b92915050565b6000819050919050565b611604816115f1565b811461160f57600080fd5b50565b600081359050611621816115fb565b92915050565b6000806000606084860312156116405761163f6114d7565b5b600061164e868287016115dc565b935050602061165f86828701611612565b925050604061167086828701611612565b9150509250925092565b600080600060408486031215611693576116926114d7565b5b60006116a186828701611612565b935050602084013567ffffffffffffffff8111156116c2576116c16114dc565b5b6116ce868287016114f0565b92509250509250925092565b6116e3816115f1565b82525050565b60006020820190506116fe60008301846116da565b92915050565b60006020828403121561171a576117196114d7565b5b600061172884828501611612565b91505092915050565b60008083601f840112611747576117466114e1565b5b8235905067ffffffffffffffff811115611764576117636114e6565b5b6020830191508360018202830111156117805761177f6114eb565b5b9250929050565b600080600080606085870312156117a1576117a06114d7565b5b60006117af87828801611612565b94505060206117c087828801611612565b935050604085013567ffffffffffffffff8111156117e1576117e06114dc565b5b6117ed87828801611731565b925092505092959194509250565b611804816115b3565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061184a5761184961180a565b5b50565b600081905061185b82611839565b919050565b600061186b8261184d565b9050919050565b61187b81611860565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118bb5780820151818401526020810190506118a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006118e382611881565b6118ed818561188c565b93506118fd81856020860161189d565b611906816118c7565b840191505092915050565b60008115159050919050565b61192681611911565b82525050565b600060e082019050611941600083018a6117fb565b61194e60208301896116da565b61195b6040830188611872565b61196860608301876116da565b818103608083015261197a81866118d8565b905081810360a083015261198e81856118d8565b905061199d60c083018461191d565b98975050505050505050565b6119b281611911565b81146119bd57600080fd5b50565b6000813590506119cf816119a9565b92915050565b600080604083850312156119ec576119eb6114d7565b5b60006119fa85828601611612565b9250506020611a0b858286016119c0565b9150509250929050565b600081905082602060030282011115611a3157611a306114eb565b5b92915050565b60008060008060a08587031215611a5157611a506114d7565b5b6000611a5f87828801611612565b945050602085013567ffffffffffffffff811115611a8057611a7f6114dc565b5b611a8c878288016114f0565b93509350506040611a9f87828801611a15565b91505092959194509250565b60008060408385031215611ac257611ac16114d7565b5b6000611ad085828601611612565b9250506020611ae185828601611612565b9150509250929050565b6000604082019050611b0060008301856116da565b611b0d60208301846116da565b9392505050565b600060a082019050611b2960008301886117fb565b611b3660208301876116da565b611b4360408301866116da565b611b50606083018561191d565b611b5d608083018461191d565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b9d60108361188c565b9150611ba882611b67565b602082019050919050565b60006020820190508181036000830152611bcc81611b90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c0d826115f1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3f57611c3e611bd3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ccb57607f821691505b602082108103611cde57611cdd611c84565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d09565b611d508683611d09565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d8d611d88611d83846115f1565b611d68565b6115f1565b9050919050565b6000819050919050565b611da783611d72565b611dbb611db382611d94565b848454611d16565b825550505050565b600090565b611dd0611dc3565b611ddb818484611d9e565b505050565b5b81811015611dff57611df4600082611dc8565b600181019050611de1565b5050565b601f821115611e4457611e1581611ce4565b611e1e84611cf9565b81016020851015611e2d578190505b611e41611e3985611cf9565b830182611de0565b50505b505050565b600082821c905092915050565b6000611e6760001984600802611e49565b1980831691505092915050565b6000611e808383611e56565b9150826002028217905092915050565b611e9a8383611c4a565b67ffffffffffffffff811115611eb357611eb2611c55565b5b611ebd8254611cb3565b611ec8828285611e03565b6000601f831160018114611ef75760008415611ee5578287013590505b611eef8582611e74565b865550611f57565b601f198416611f0586611ce4565b60005b82811015611f2d57848901358255600182019150602085019450602081019050611f08565b86831015611f4a5784890135611f46601f891682611e56565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f9660118361188c565b9150611fa182611f60565b602082019050919050565b60006020820190508181036000830152611fc581611f89565b9050919050565b6000611fd7826115f1565b9150611fe2836115f1565b9250828201905080821115611ffa57611ff9611bd3565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061203660188361188c565b915061204182612000565b602082019050919050565b6000602082019050818103600083015261206581612029565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006120c8603a8361188c565b91506120d38261206c565b604082019050919050565b600060208201905081810360008301526120f7816120bb565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061215a60348361188c565b9150612165826120fe565b604082019050919050565b600060208201905081810360008301526121898161214d565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006121ec60228361188c565b91506121f782612190565b604082019050919050565b6000602082019050818103600083015261221b816121df565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061225860208361188c565b915061226382612222565b602082019050919050565b600060208201905081810360008301526122878161224b565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006122ea60248361188c565b91506122f58261228e565b604082019050919050565b60006020820190508181036000830152612319816122dd565b9050919050565b600060408201905061233560008301856117fb565b61234260208301846116da565b9392505050565b600081519050612358816119a9565b92915050565b600060208284031215612374576123736114d7565b5b600061238284828501612349565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006123c160208361188c565b91506123cc8261238b565b602082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b6000815461240481611cb3565b61240e818661188c565b94506001821660008114612429576001811461243f57612472565b60ff198316865281151560200286019350612472565b61244885611ce4565b60005b8381101561246a5781548189015260018201915060208101905061244b565b808801955050505b50505092915050565b600060408201905061249060008301856117fb565b81810360208301526124a281846123f7565b90509392505050565b6000815190506124ba816115fb565b92915050565b6000602082840312156124d6576124d56114d7565b5b60006124e4848285016124ab565b91505092915050565b600060408201905061250260008301856116da565b61250f602083018461191d565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61253f816115f1565b82525050565b60006125518383612536565b60208301905092915050565b6000602082019050919050565b61257381612516565b61257d8184612521565b92506125888261252c565b8060005b838110156125b95781516125a08782612545565b96506125ab8361255d565b92505060018101905061258c565b505050505050565b6000819050919050565b60006125e66125e16125dc846125c1565b611d68565b6115f1565b9050919050565b6125f6816125cb565b82525050565b600082825260208201905092915050565b50565b600061261d6000836125fc565b91506126288261260d565b600082019050919050565b600061014082019050612649600083018a6116da565b61265660208301896116da565b612663604083018861256a565b612670608083018761256a565b61267d60c08301866125ed565b61268a60e083018561191d565b61269861010083018461191d565b8181036101208301526126aa81612610565b905098975050505050505050565b60006060820190506126cd60008301866116da565b6126da60208301856116da565b6126e7604083018461191d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b6000612739838561188c565b935061274683858461271e565b61274f836118c7565b840190509392505050565b600081519050919050565b60006127708261275a565b61277a81856125fc565b935061278a81856020860161189d565b612793816118c7565b840191505092915050565b600060c08201905081810360008301526127b981898b61272d565b90506127c860208301886116da565b6127d560408301876116da565b6127e260608301866116da565b6127ef608083018561191d565b81810360a08301526128018184612765565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061286b60338361188c565b91506128768261280f565b604082019050919050565b6000602082019050818103600083015261289a8161285e565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128d7601a8361188c565b91506128e2826128a1565b602082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612947826115f1565b9150612952836115f1565b9250826129625761296161290d565b5b82820690509291505056fea26469706673582212204585d891b6a6cc5e06dcdf7dce42b9177e7e6a34a758209460f891e93c211bc664736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063854b6a4f1161008a578063c4a9e11611610059578063c4a9e116146102b4578063cf376256146102df578063d5a44f861461031d578063d76b67941461035e576100e8565b8063854b6a4f1461021b57806399ad6c5614610244578063a035b1fe14610260578063b5b20c001461028b576100e8565b80635badbe4c116100c65780635badbe4c1461015b5780638150d50714610186578063815a0572146101af57806381d12c58146101d8576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635b5cf6d414610132575b600080fd5b61010760048036038101906101029190611546565b610389565b005b34801561011557600080fd5b50610130600480360381019061012b9190611627565b610477565b005b34801561013e57600080fd5b506101596004803603810190610154919061167a565b61058a565b005b34801561016757600080fd5b50610170610745565b60405161017d91906116e9565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611704565b61074b565b005b3480156101bb57600080fd5b506101d660048036038101906101d19190611787565b6109d9565b005b3480156101e457600080fd5b506101ff60048036038101906101fa9190611704565b610a16565b604051610212979695949392919061192c565b60405180910390f35b34801561022757600080fd5b50610242600480360381019061023d91906119d5565b610ba2565b005b61025e60048036038101906102599190611a37565b610f14565b005b34801561026c57600080fd5b50610275611070565b60405161028291906116e9565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190611aab565b611076565b005b3480156102c057600080fd5b506102c961123d565b6040516102d691906116e9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190611704565b611243565b604051610314929190611aeb565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190611704565b611267565b604051610355959493929190611b14565b60405180910390f35b34801561036a57600080fd5b506103736112d7565b60405161038091906116e9565b60405180910390f35b6001543410156103ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c590611bb3565b60405180910390fd5b6000600760008154809291906103e390611c02565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348160010181905550610455826112dd565b81600301819055508383826004019182610470929190611e90565b5050505050565b600082116104ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b190611fac565b60405180910390fd5b6000600560008154809291906104cf90611c02565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105449190611fcc565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161057b91906116e9565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105b5576105b461180a565b5b8160020160009054906101000a900460ff1660038111156105d9576105d861180a565b5b14610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061204c565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bd906120de565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106ee576106ed61180a565b5b02179055508383836005019182610706929190611e90565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161073691906116e9565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90612170565b60405180910390fd5b8060020154421161083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190612202565b60405180910390fd5b8060030160019054906101000a900460ff161561088c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108839061226e565b60405180910390fd5b8060030160009054906101000a900460ff16156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612300565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161095a929190612320565b6020604051808303816000875af1158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d919061235e565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109cd91906116e9565b60405180910390a15050565b600082828101906109ea9190611704565b905060006002600083815260200190815260200160002090508060000154600181905550505050505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610a7e90611cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa90611cb3565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b505050505090806005018054610b0c90611cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890611cb3565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610bcd57610bcc61180a565b5b8160020160009054906101000a900460ff166003811115610bf157610bf061180a565b5b14610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c28906123d7565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610c7457610c7361180a565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d1992919061247b565b6020604051808303816000875af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c91906124c0565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610d8f9291906124ed565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610e339796959493929190612633565b60206040518083038185885af1158015610e51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7691906124c0565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610eda939291906126b8565b600060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f2990611c02565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9bde16034878787600060038110610fa257610fa16126ef565b5b602002013588600160038110610fbb57610fba6126ef565b5b602002013589600260038110610fd457610fd36126ef565b5b602002013560018a604051602001610fec91906116e9565b6040516020818303038152906040526040518963ffffffff1660e01b815260040161101d979695949392919061279e565b60206040518083038185885af115801561103b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061106091906124c0565b8160010181905550505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612881565b60405180910390fd5b8060030160019054906101000a900460ff1615611171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111689061226e565b60405180910390fd5b8060030160009054906101000a900460ff16156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612300565b60405180910390fd5b80600201544211156111e85781426111db9190611fcc565b8160020181905550611201565b8181600201546111f89190611fcc565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161123091906116e9565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b60006112e761135c565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161134e929190611aeb565b60405180910390a150919050565b60008060005b6005548110156113e3576004600082815260200190815260200160002060030160009054906101000a900460ff166113d657600460008281526020019081526020016000206002015442116113d6576004600082815260200190815260200160002060010154826113d39190611fcc565b91505b8080600101915050611362565b5060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e906128ed565b60405180910390fd5b60008144611435919061293c565b9050600080600090505b6005548110156114d0576004600082815260200190815260200160002060030160009054906101000a900460ff166114c357600460008281526020019081526020016000206002015442116114c3576004600082815260200190815260200160002060010154826114b09190611fcc565b9150828211156114c2578094506114d0565b5b808060010191505061143f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611506576115056114e1565b5b8235905067ffffffffffffffff811115611523576115226114e6565b5b60208301915083600182028301111561153f5761153e6114eb565b5b9250929050565b6000806020838503121561155d5761155c6114d7565b5b600083013567ffffffffffffffff81111561157b5761157a6114dc565b5b611587858286016114f0565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115be82611593565b9050919050565b6115ce816115b3565b81146115d957600080fd5b50565b6000813590506115eb816115c5565b92915050565b6000819050919050565b611604816115f1565b811461160f57600080fd5b50565b600081359050611621816115fb565b92915050565b6000806000606084860312156116405761163f6114d7565b5b600061164e868287016115dc565b935050602061165f86828701611612565b925050604061167086828701611612565b9150509250925092565b600080600060408486031215611693576116926114d7565b5b60006116a186828701611612565b935050602084013567ffffffffffffffff8111156116c2576116c16114dc565b5b6116ce868287016114f0565b92509250509250925092565b6116e3816115f1565b82525050565b60006020820190506116fe60008301846116da565b92915050565b60006020828403121561171a576117196114d7565b5b600061172884828501611612565b91505092915050565b60008083601f840112611747576117466114e1565b5b8235905067ffffffffffffffff811115611764576117636114e6565b5b6020830191508360018202830111156117805761177f6114eb565b5b9250929050565b600080600080606085870312156117a1576117a06114d7565b5b60006117af87828801611612565b94505060206117c087828801611612565b935050604085013567ffffffffffffffff8111156117e1576117e06114dc565b5b6117ed87828801611731565b925092505092959194509250565b611804816115b3565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061184a5761184961180a565b5b50565b600081905061185b82611839565b919050565b600061186b8261184d565b9050919050565b61187b81611860565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118bb5780820151818401526020810190506118a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006118e382611881565b6118ed818561188c565b93506118fd81856020860161189d565b611906816118c7565b840191505092915050565b60008115159050919050565b61192681611911565b82525050565b600060e082019050611941600083018a6117fb565b61194e60208301896116da565b61195b6040830188611872565b61196860608301876116da565b818103608083015261197a81866118d8565b905081810360a083015261198e81856118d8565b905061199d60c083018461191d565b98975050505050505050565b6119b281611911565b81146119bd57600080fd5b50565b6000813590506119cf816119a9565b92915050565b600080604083850312156119ec576119eb6114d7565b5b60006119fa85828601611612565b9250506020611a0b858286016119c0565b9150509250929050565b600081905082602060030282011115611a3157611a306114eb565b5b92915050565b60008060008060a08587031215611a5157611a506114d7565b5b6000611a5f87828801611612565b945050602085013567ffffffffffffffff811115611a8057611a7f6114dc565b5b611a8c878288016114f0565b93509350506040611a9f87828801611a15565b91505092959194509250565b60008060408385031215611ac257611ac16114d7565b5b6000611ad085828601611612565b9250506020611ae185828601611612565b9150509250929050565b6000604082019050611b0060008301856116da565b611b0d60208301846116da565b9392505050565b600060a082019050611b2960008301886117fb565b611b3660208301876116da565b611b4360408301866116da565b611b50606083018561191d565b611b5d608083018461191d565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b9d60108361188c565b9150611ba882611b67565b602082019050919050565b60006020820190508181036000830152611bcc81611b90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c0d826115f1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3f57611c3e611bd3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ccb57607f821691505b602082108103611cde57611cdd611c84565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d09565b611d508683611d09565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d8d611d88611d83846115f1565b611d68565b6115f1565b9050919050565b6000819050919050565b611da783611d72565b611dbb611db382611d94565b848454611d16565b825550505050565b600090565b611dd0611dc3565b611ddb818484611d9e565b505050565b5b81811015611dff57611df4600082611dc8565b600181019050611de1565b5050565b601f821115611e4457611e1581611ce4565b611e1e84611cf9565b81016020851015611e2d578190505b611e41611e3985611cf9565b830182611de0565b50505b505050565b600082821c905092915050565b6000611e6760001984600802611e49565b1980831691505092915050565b6000611e808383611e56565b9150826002028217905092915050565b611e9a8383611c4a565b67ffffffffffffffff811115611eb357611eb2611c55565b5b611ebd8254611cb3565b611ec8828285611e03565b6000601f831160018114611ef75760008415611ee5578287013590505b611eef8582611e74565b865550611f57565b601f198416611f0586611ce4565b60005b82811015611f2d57848901358255600182019150602085019450602081019050611f08565b86831015611f4a5784890135611f46601f891682611e56565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f9660118361188c565b9150611fa182611f60565b602082019050919050565b60006020820190508181036000830152611fc581611f89565b9050919050565b6000611fd7826115f1565b9150611fe2836115f1565b9250828201905080821115611ffa57611ff9611bd3565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061203660188361188c565b915061204182612000565b602082019050919050565b6000602082019050818103600083015261206581612029565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006120c8603a8361188c565b91506120d38261206c565b604082019050919050565b600060208201905081810360008301526120f7816120bb565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061215a60348361188c565b9150612165826120fe565b604082019050919050565b600060208201905081810360008301526121898161214d565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006121ec60228361188c565b91506121f782612190565b604082019050919050565b6000602082019050818103600083015261221b816121df565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061225860208361188c565b915061226382612222565b602082019050919050565b600060208201905081810360008301526122878161224b565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006122ea60248361188c565b91506122f58261228e565b604082019050919050565b60006020820190508181036000830152612319816122dd565b9050919050565b600060408201905061233560008301856117fb565b61234260208301846116da565b9392505050565b600081519050612358816119a9565b92915050565b600060208284031215612374576123736114d7565b5b600061238284828501612349565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006123c160208361188c565b91506123cc8261238b565b602082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b6000815461240481611cb3565b61240e818661188c565b94506001821660008114612429576001811461243f57612472565b60ff198316865281151560200286019350612472565b61244885611ce4565b60005b8381101561246a5781548189015260018201915060208101905061244b565b808801955050505b50505092915050565b600060408201905061249060008301856117fb565b81810360208301526124a281846123f7565b90509392505050565b6000815190506124ba816115fb565b92915050565b6000602082840312156124d6576124d56114d7565b5b60006124e4848285016124ab565b91505092915050565b600060408201905061250260008301856116da565b61250f602083018461191d565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61253f816115f1565b82525050565b60006125518383612536565b60208301905092915050565b6000602082019050919050565b61257381612516565b61257d8184612521565b92506125888261252c565b8060005b838110156125b95781516125a08782612545565b96506125ab8361255d565b92505060018101905061258c565b505050505050565b6000819050919050565b60006125e66125e16125dc846125c1565b611d68565b6115f1565b9050919050565b6125f6816125cb565b82525050565b600082825260208201905092915050565b50565b600061261d6000836125fc565b91506126288261260d565b600082019050919050565b600061014082019050612649600083018a6116da565b61265660208301896116da565b612663604083018861256a565b612670608083018761256a565b61267d60c08301866125ed565b61268a60e083018561191d565b61269861010083018461191d565b8181036101208301526126aa81612610565b905098975050505050505050565b60006060820190506126cd60008301866116da565b6126da60208301856116da565b6126e7604083018461191d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b6000612739838561188c565b935061274683858461271e565b61274f836118c7565b840190509392505050565b600081519050919050565b60006127708261275a565b61277a81856125fc565b935061278a81856020860161189d565b612793816118c7565b840191505092915050565b600060c08201905081810360008301526127b981898b61272d565b90506127c860208301886116da565b6127d560408301876116da565b6127e260608301866116da565b6127ef608083018561191d565b81810360a08301526128018184612765565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061286b60338361188c565b91506128768261280f565b604082019050919050565b6000602082019050818103600083015261289a8161285e565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128d7601a8361188c565b91506128e2826128a1565b602082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612947826115f1565b9150612952836115f1565b9250826129625761296161290d565b5b82820690509291505056fea26469706673582212204585d891b6a6cc5e06dcdf7dce42b9177e7e6a34a758209460f891e93c211bc664736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/components/posts/ViewPostModal.jsx b/client/src/components/posts/ViewPostModal.jsx index 05f88ec..1f53177 100644 --- a/client/src/components/posts/ViewPostModal.jsx +++ b/client/src/components/posts/ViewPostModal.jsx @@ -6,7 +6,9 @@ function ViewPostModal({ show, setShow, title, post, }) { const handleClose = () => setShow(false); - const { content, author } = post; + const { content, author, embeddedData } = post; + + const embeddedDataJson = JSON.stringify(embeddedData, null, 2); return ( @@ -25,6 +27,11 @@ function ViewPostModal({

{content}

+ {embeddedData && Object.entries(embeddedData).length && ( +
+            {embeddedDataJson}
+          
+ )} + + +
+ ); +} + +ProposePriceChangeModal.propTypes = { + show: PropTypes.bool.isRequired, + setShow: PropTypes.func.isRequired, + title: PropTypes.string, +}; + +ProposePriceChangeModal.defaultProps = { + title: 'Propose Price Change', +}; + +export default ProposePriceChangeModal; diff --git a/client/src/components/work-contracts/WorkContract.jsx b/client/src/components/work-contracts/WorkContract.jsx index 17a6891..b25a5e4 100644 --- a/client/src/components/work-contracts/WorkContract.jsx +++ b/client/src/components/work-contracts/WorkContract.jsx @@ -1,9 +1,17 @@ -import { useMemo } from 'react'; +import { + useCallback, useContext, useEffect, useMemo, useState, +} from 'react'; import { PropTypes } from 'prop-types'; +import Web3 from 'web3'; +import Button from 'react-bootstrap/Button'; + +import Web3Context from '../../contexts/Web3Context'; import useList from '../../utils/List'; import WorkContractContext from '../../contexts/WorkContractContext'; import AvailabilityStakes from './AvailabilityStakes'; import WorkRequests from './WorkRequests'; +import ProposePriceChangeModal from './ProposePriceChangeModal'; +import PriceProposals from './PriceProposals'; function WorkContract({ workContract, @@ -13,14 +21,49 @@ function WorkContract({ title, verb, showRequestWork, + showProposePriceChange, }) { const [availabilityStakes, dispatchAvailabilityStake] = useList(); + const [priceWei, setPriceWei] = useState(); + const [priceEth, setPriceEth] = useState(); + const { provider } = useContext(Web3Context); + const [showPriceChangeModal, setShowPriceChangeModal] = useState(false); + + const fetchPrice = useCallback(async () => { + const web3 = new Web3(provider); + const fetchedPrice = await workContract.methods.price().call(); + setPriceWei(fetchedPrice); + setPriceEth(web3.utils.fromWei(fetchedPrice, 'ether')); + // TODO: Subscribe to price update event + // TODO: Unsubscribe + }, [workContract, provider]); + + useEffect(() => { + fetchPrice(); + }, [workContract, provider, fetchPrice]); + const workContractProviderValue = useMemo(() => ({ - workContract, availabilityStakes, dispatchAvailabilityStake, - }), [workContract, availabilityStakes, dispatchAvailabilityStake]); + workContract, availabilityStakes, dispatchAvailabilityStake, priceWei, priceEth, + }), [workContract, availabilityStakes, dispatchAvailabilityStake, priceWei, priceEth]); + return ( + {showProposePriceChange && ( + + )}

{title}

+

{`Price: ${priceEth} ETH`}

+ {showProposePriceChange && ( + <> + + + + )} { function WorkRequests({ showRequestWork, verb, }) { - const { workContract, availabilityStakes } = useContext(WorkContractContext); + const { workContract, availabilityStakes, priceWei } = useContext(WorkContractContext); const [workRequests, dispatchWorkRequest] = useList(); - const [price, setPrice] = useState(); const [showRequestModal, setShowRequestModal] = useState(false); const [showEvidenceModal, setShowEvidenceModal] = useState(false); const [currentRequestId, setCurrentRequestId] = useState(); @@ -43,12 +42,6 @@ function WorkRequests({ provider, account, } = useContext(Web3Context); - const fetchPrice = useCallback(async () => { - const web3 = new Web3(provider); - const fetchedPrice = await workContract.methods.price().call(); - setPrice(web3.utils.fromWei(fetchedPrice, 'ether')); - }, [workContract, provider]); - const fetchWorkRequest = useCallback(async (requestIndex) => { const web3 = new Web3(provider); const r = await workContract.methods.requests(requestIndex).call(); @@ -73,7 +66,6 @@ function WorkRequests({ }, [workContract, dispatchWorkRequest, fetchWorkRequest]); useEffect(() => { - fetchPrice(); fetchWorkRequests(); workContract.events.WorkAssigned({ fromBlock: 'latest' }).on('data', (event) => { @@ -90,7 +82,7 @@ function WorkRequests({ console.log('event: work approval submitted', event); fetchWorkRequest(event.returnValues.requestIndex); }); - }, [workContract, fetchWorkRequests, fetchPrice, fetchWorkRequest]); + }, [workContract, fetchWorkRequests, fetchWorkRequest]); const submitWorkApproval = useCallback(async (requestIndex) => { await workContract.methods.submitWorkApproval(requestIndex, true).send({ @@ -116,14 +108,12 @@ function WorkRequests({ }; const onSubmitRequest = useCallback(async ({ hash }) => { - const web3 = new Web3(provider); - const priceWei = BigInt(web3.utils.toWei(price, 'ether')); await workContract.methods.requestWork(hash).send({ from: account, gas: 1000000, value: priceWei, }); - }, [provider, workContract, account, price]); + }, [workContract, account, priceWei]); const onSubmitEvidence = useCallback(async ({ hash }) => { await workContract.methods.submitWorkEvidence(currentRequestId, hash).send({ @@ -143,9 +133,6 @@ function WorkRequests({ -
- {`Price: ${price} ETH`} -
{showRequestWork && (
diff --git a/client/src/contract-addresses.json b/client/src/contract-addresses.json index a1b06b2..65b35ad 100644 --- a/client/src/contract-addresses.json +++ b/client/src/contract-addresses.json @@ -1,9 +1,9 @@ { "localhost": { - "DAO": "0x84A5F75A39e25bD39B69F7d096d159557EaF2a59", - "Work1": "0xaB3Bf8f9BE69289B0dd2a154a6390c8D9F780c59", - "Onboarding": "0xf10E261AFF9Aa8b05716002bFf44D3e990401C02", - "Proposals": "0xBD616B6331e0953Fc20281a54A684E614D8C4026" + "DAO": "0x358A07B26F4c556140872ecdB69c58e8807E7178", + "Work1": "0xC62b0b16B3ef06c417BFC4Fb02E0Da06aF5A95Ef", + "Onboarding": "0x91B8D37F396cfb887996119CD37a0886C78a7B9C", + "Proposals": "0x63472674239ffb70618Fae043610917f2d9B781C" }, "sepolia": { "DAO": "0x58c8ea0ba031431423cD84787d7d57F0Bf7c6E63", diff --git a/client/src/utils/Post.js b/client/src/utils/Post.js index d15b780..737a8b2 100644 --- a/client/src/utils/Post.js +++ b/client/src/utils/Post.js @@ -9,37 +9,59 @@ window.Buffer = Buffer; class Post { constructor({ - author, content, signature, hash, + author, content, signature, hash, embeddedData, }) { this.author = author; this.content = content; this.signature = signature; this.hash = hash; + this.embeddedData = embeddedData; } // Read from API static async read(hash) { - const { data: { content, author, signature } } = await axios.get(`/api/read/${hash}`); + const { + data: { + content, author, signature, embeddedData, + }, + } = await axios.get(`/api/read/${hash}`); // Verify hash - const derivedHash = objectHash({ author, content, signature }); + const derivedHash = objectHash({ + author, content, signature, embeddedData, + }); if (hash !== derivedHash) { throw new Error('Hash mismatch'); } // Verify signature - const recovered = recoverPersonalSignature({ data: content, signature }); + let contentToVerify = content; + if (embeddedData && Object.entries(embeddedData).length) { + contentToVerify += `\n\n${JSON.stringify(embeddedData, null, 2)}`; + } + const recovered = recoverPersonalSignature({ data: contentToVerify, signature }); if (recovered !== author) { throw new Error('Author mismatch'); } return new Post({ - content, author, signature, hash, + content, author, signature, hash, embeddedData, }); } + static deriveEmbeddedData(content) { + const dataStart = content.search(/^\{/); + const dataStr = content.substring(dataStart); + const embeddedData = JSON.parse(dataStr); + return embeddedData; + } + // Include MetaMask signature async sign(web3Provider, account) { this.author = account; - const msg = `0x${Buffer.from(this.content, 'utf8').toString('hex')}`; + let contentToSign = this.content; + if (this.embeddedData && Object.entries(this.embeddedData).length) { + contentToSign += `\n\n${JSON.stringify(this.embeddedData, null, 2)}`; + } + const msg = `0x${Buffer.from(contentToSign, 'utf8').toString('hex')}`; this.signature = await web3Provider.request({ method: 'personal_sign', params: [msg, account], @@ -53,6 +75,7 @@ class Post { author: this.author, content: this.content, signature: this.signature, + embeddedData: this.embeddedData, }; const { data: hash } = await axios.post('/api/write', data); this.hash = hash; diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index a1b06b2..65b35ad 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -1,9 +1,9 @@ { "localhost": { - "DAO": "0x84A5F75A39e25bD39B69F7d096d159557EaF2a59", - "Work1": "0xaB3Bf8f9BE69289B0dd2a154a6390c8D9F780c59", - "Onboarding": "0xf10E261AFF9Aa8b05716002bFf44D3e990401C02", - "Proposals": "0xBD616B6331e0953Fc20281a54A684E614D8C4026" + "DAO": "0x358A07B26F4c556140872ecdB69c58e8807E7178", + "Work1": "0xC62b0b16B3ef06c417BFC4Fb02E0Da06aF5A95Ef", + "Onboarding": "0x91B8D37F396cfb887996119CD37a0886C78a7B9C", + "Proposals": "0x63472674239ffb70618Fae043610917f2d9B781C" }, "sepolia": { "DAO": "0x58c8ea0ba031431423cD84787d7d57F0Bf7c6E63", diff --git a/ethereum/contracts/IOnProposalAccepted.sol b/ethereum/contracts/IOnProposalAccepted.sol new file mode 100644 index 0000000..a37e2e7 --- /dev/null +++ b/ethereum/contracts/IOnProposalAccepted.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.24; + +interface IOnProposalAccepted { + function onProposalAccepted( + uint stakedFor, + uint stakedAgainst, + bytes calldata callbackData + ) external; +} diff --git a/ethereum/contracts/Onboarding.sol b/ethereum/contracts/Onboarding.sol index 3240230..c26383c 100644 --- a/ethereum/contracts/Onboarding.sol +++ b/ethereum/contracts/Onboarding.sol @@ -6,7 +6,11 @@ import "./WorkContract.sol"; import "./IOnValidate.sol"; contract Onboarding is WorkContract, IOnValidate { - constructor(DAO dao_, uint price_) WorkContract(dao_, price_) {} + constructor( + DAO dao_, + Proposals proposals_, + uint price_ + ) WorkContract(dao_, proposals_, price_) {} /// Accept work approval/disapproval from customer function submitWorkApproval( diff --git a/ethereum/contracts/Proposals.sol b/ethereum/contracts/Proposals.sol index ae2bd13..0363a40 100644 --- a/ethereum/contracts/Proposals.sol +++ b/ethereum/contracts/Proposals.sol @@ -68,6 +68,9 @@ contract Proposals is DAOContract, IOnValidate { bool callbackOnValidate, bytes calldata callbackData ) external payable returns (uint proposalIndex) { + // TODO: Consider taking author as a parameter, + // or else accepting a postIndex instead of contentId, + // or support post lookup by contentId uint postIndex = dao.addPost(msg.sender, contentId); proposalIndex = proposalCount++; Proposal storage proposal = proposals[proposalIndex]; @@ -92,6 +95,9 @@ contract Proposals is DAOContract, IOnValidate { pools[2] = proposal.referenda[2].pools; } + // TODO: function getProposals() + // Enumerate timing so clients can render it + /// External function for reputation holders to attest toward a given proposal; /// This is non-binding and non-encumbering, so it does not transfer any reputation. function attest(uint proposalIndex, uint amount) external { diff --git a/ethereum/contracts/Work1.sol b/ethereum/contracts/Work1.sol index 5c54c96..8a76118 100644 --- a/ethereum/contracts/Work1.sol +++ b/ethereum/contracts/Work1.sol @@ -3,7 +3,12 @@ pragma solidity ^0.8.24; import "./DAO.sol"; import "./WorkContract.sol"; +import "./Proposals.sol"; contract Work1 is WorkContract { - constructor(DAO dao_, uint price_) WorkContract(dao_, price_) {} + constructor( + DAO dao_, + Proposals proposals_, + uint price_ + ) WorkContract(dao_, proposals_, price_) {} } diff --git a/ethereum/contracts/WorkContract.sol b/ethereum/contracts/WorkContract.sol index 5f9c7d0..1e263db 100644 --- a/ethereum/contracts/WorkContract.sol +++ b/ethereum/contracts/WorkContract.sol @@ -3,8 +3,14 @@ pragma solidity ^0.8.24; import "./DAO.sol"; import "./IAcceptAvailability.sol"; +import "./Proposals.sol"; +import "./IOnProposalAccepted.sol"; -abstract contract WorkContract is DAOContract, IAcceptAvailability { +abstract contract WorkContract is + DAOContract, + IAcceptAvailability, + IOnProposalAccepted +{ struct AvailabilityStake { address worker; uint256 amount; @@ -30,7 +36,15 @@ abstract contract WorkContract is DAOContract, IAcceptAvailability { bool approval; } - uint public immutable price; + struct PriceProposal { + uint price; + uint proposalIndex; + } + + Proposals proposalsContract; + uint public price; + mapping(uint => PriceProposal) public priceProposals; + uint public priceProposalCount; mapping(uint => AvailabilityStake) public stakes; uint public stakeCount; mapping(uint => WorkRequest) public requests; @@ -43,8 +57,13 @@ abstract contract WorkContract is DAOContract, IAcceptAvailability { event WorkEvidenceSubmitted(uint requestIndex); event WorkApprovalSubmitted(uint requestIndex, bool approval); - constructor(DAO dao, uint price_) DAOContract(dao) { + constructor( + DAO dao, + Proposals proposalsContract_, + uint price_ + ) DAOContract(dao) { price = price_; + proposalsContract = proposalsContract_; } /// Accept availability stakes as reputation token transfer @@ -185,4 +204,39 @@ abstract contract WorkContract is DAOContract, IAcceptAvailability { ); dao.stake(poolIndex, stake.amount, true); } + + function proposeNewPrice( + uint newPrice, + string calldata contentId, + uint[3] calldata durations + ) external payable { + uint priceProposalIndex = priceProposalCount++; + PriceProposal storage priceProposal = priceProposals[ + priceProposalIndex + ]; + priceProposal.price = newPrice; + priceProposal.proposalIndex = proposalsContract.propose{ + value: msg.value + }( + contentId, + durations[0], + durations[1], + durations[2], + true, + abi.encode(priceProposalIndex) + ); + } + + function onProposalAccepted( + uint, // stakedFor + uint, // stakedAgainst + bytes calldata callbackData + ) external { + uint priceProposalIndex = abi.decode(callbackData, (uint)); + PriceProposal storage priceProposal = priceProposals[ + priceProposalIndex + ]; + price = priceProposal.price; + // TODO: Emit price change event + } } diff --git a/ethereum/scripts/deploy.js b/ethereum/scripts/deploy.js index 5da922c..ce724cd 100644 --- a/ethereum/scripts/deploy.js +++ b/ethereum/scripts/deploy.js @@ -4,9 +4,9 @@ const deployDAOContract = require('./util/deploy-dao-contract'); async function main() { await deployContract('DAO'); + await deployDAOContract('Proposals'); await deployWorkContract('Work1'); await deployWorkContract('Onboarding'); - await deployDAOContract('Proposals'); } main().catch((error) => { diff --git a/ethereum/scripts/util/deploy-work-contract.js b/ethereum/scripts/util/deploy-work-contract.js index 865f5e2..1f7b263 100644 --- a/ethereum/scripts/util/deploy-work-contract.js +++ b/ethereum/scripts/util/deploy-work-contract.js @@ -11,7 +11,10 @@ const deployWorkContract = async (name) => { const priceEnvVar = `${name.toUpperCase()}_PRICE`; const price = ethers.parseEther(process.env[priceEnvVar] || 0.001); - await deployContract(name, [contractAddresses[network].DAO, price]); + await deployContract(name, [ + contractAddresses[network].DAO, + contractAddresses[network].Proposals, + price]); }; module.exports = deployWorkContract; diff --git a/ethereum/test/Work1.js b/ethereum/test/Work1.js index a5ff00a..26c2854 100644 --- a/ethereum/test/Work1.js +++ b/ethereum/test/Work1.js @@ -14,8 +14,10 @@ describe('Work1', () => { const DAO = await ethers.getContractFactory('DAO'); const dao = await DAO.deploy(); + const Proposals = await ethers.getContractFactory('Proposals'); + const proposals = await Proposals.deploy(dao.target); const Work1 = await ethers.getContractFactory('Work1'); - const work1 = await Work1.deploy(dao.target, WORK1_PRICE); + const work1 = await Work1.deploy(dao.target, proposals.target, WORK1_PRICE); await dao.addPost(account1, 'some-content-id'); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); @@ -34,7 +36,7 @@ describe('Work1', () => { await dao.evaluateOutcome(0); return { - dao, work1, account1, account2, + dao, work1, proposals, account1, account2, }; } @@ -283,4 +285,15 @@ describe('Work1', () => { await expect(work1.submitWorkApproval(0, true)).to.be.revertedWith('Status must be EvidenceSubmitted'); }); }); + + describe('Propose new price', () => { + it('can propose a new price', async () => { + const { + proposals, work1, + } = await loadFixture(deploy); + expect(await proposals.proposalCount()).to.equal(0); + await work1.proposeNewPrice(12345, 'content-id', [1, 1, 1]); + expect(await proposals.proposalCount()).to.equal(1); + }); + }); });