diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..0f4b58f --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env"] +} diff --git a/.gitignore b/.gitignore index 9ef20f9..b1ab868 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +lib/ node_modules/ .DS_Store diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..ef81a50 --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +js +.babelrc +!build diff --git a/.soliumignore b/.soliumignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.soliumignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.soliumrc.json b/.soliumrc.json new file mode 100644 index 0000000..09bb174 --- /dev/null +++ b/.soliumrc.json @@ -0,0 +1,22 @@ +{ + "custom-rules-filename": null, + "rules": { + "imports-on-top": true, + "variable-declarations": true, + "array-declarations": true, + "operator-whitespace": true, + "lbrace": true, + "mixedcase": true, + "camelcase": true, + "uppercase": true, + "no-with": true, + "no-empty-blocks": true, + "no-unused-vars": true, + "double-quotes": true, + "blank-lines": true, + "indentation": true, + "whitespace": true, + "deprecated-suicide": true, + "pragma-on-top": true + } +} \ No newline at end of file diff --git a/README.md b/README.md index cdb71c1..23db338 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Liquid Pledging +![Liquid Pledging](readme-header.png) > Ethereum contract to delegate donations to projects. @@ -16,7 +16,7 @@ Welcome to the code for the liquidpledging contract, a new way to distribute don - [Help](#help) ### Install -1. Click **Star** on this repo near the top-right corner of this web page. +1. Click **Star** on this repo near the top-right corner of this web page (if you want to). 2. Join our [slack](http://slack.giveth.io) if you haven't already. 3. Fork this repo by clicking **Fork** button in top-right corner of this web page. Continue to follow instruction steps from your own liquidpledging repo. 5. The rest of these steps must be done from your machine's command line. Clone your own "liquidpledging" repo: @@ -41,4 +41,4 @@ The liquidpledging contract is published as an npm package for developer conveni Follow the instructions on the [liquidpleding-demo](https://github.com/ojones/liquidpledging-demo) repo. ## Help -Reach out to us on [slack](http://slack.giveth.io) for any help or to share ideas. \ No newline at end of file +Reach out to us on [slack](http://slack.giveth.io) for any help or to share ideas. diff --git a/build/ILiquidPledgingPlugin.sol.js b/build/ILiquidPledgingPlugin.sol.js index a11422b..8c29835 100644 --- a/build/ILiquidPledgingPlugin.sol.js +++ b/build/ILiquidPledgingPlugin.sol.js @@ -1,6 +1,6 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"type":"function"}] +exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] exports.ILiquidPledgingPluginByteCode = "0x" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" exports._sha256 = "0xdca1f6e8e45033d2b165904df14f39c39500c42395eabcc79e156346438f3259" diff --git a/build/LiquidPledging.sol.js b/build/LiquidPledging.sol.js index 5717cff..c91602e 100644 --- a/build/LiquidPledging.sol.js +++ b/build/LiquidPledging.sol.js @@ -1,12 +1,12 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"type":"function"}] +exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] exports.ILiquidPledgingPluginByteCode = "0x" -exports.LiquidPledgingAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingByteCode = "0x606060405234156200001057600080fd5b60405160208062004f6b833981016040528080519150505b805b60016200003881806200006e565b50600162000048600082620000a3565b5060028054600160a060020a031916600160a060020a0383161790555b505b5062000259565b8154818355818115116200009d576005028160050283600052602060002091820191016200009d9190620000d8565b5b505050565b8154818355818115116200009d576004028160040283600052602060002091820191016200009d91906200014c565b5b505050565b6200014991905b8082111562000145578054600160a860020a03191681556000620001076001830182620001be565b62000117600283016000620001be565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000df565b5090565b90565b6200014991905b808211156200014557600080825560018201805467ffffffffffffffff191690556200018360028301826200020a565b506003810180547fffffffffffffff0000000000000000000000000000000000000000000000000016905560040162000153565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001e6575062000206565b601f01602090049060005260206000209081019062000206919062000235565b5b50565b50805460008255600301600490049060005260206000209081019062000206919062000235565b5b50565b6200014991905b808211156200014557600081556001016200023c565b5090565b90565b614d0280620002696000396000f300606060405236156101385763ffffffff60e060020a60003504166314e7b1dc811461013d5780632101a6ad146101f75780632a8ec8cc1461022a5780632ee888081461024f5780633f657a461461027357806343387983146102f157806347c5ef431461031557806350f8a8031461034657806352dc7dcc146103815780635503d9ba1461044957806357adafb61461046e57806372116e92146104bf578063796d5654146105975780637f61fa93146105b85780639398f5a214610680578063af9f4563146106d1578063bce0906d146106f5578063bde60ac914610760578063cc19ecf71461077c578063d639cd7314610839578063db7c2314146108a3578063e9c211e214610960578063eba8ba0614610984578063ef3766e414610adc578063f6b24b1c14610b2d578063fbfa77cf14610bea575b600080fd5b341561014857600080fd5b61015f6001604060020a0360043516602435610c19565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101ba5780820151818401525b6020016101a1565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561020257600080fd5b6102166001604060020a0360043516610d40565b604051901515815260200160405180910390f35b341561023557600080fd5b61023d610df2565b60405190815260200160405180910390f35b341561025a57600080fd5b6102716001604060020a0360043516602435610dfd565b005b341561027e57600080fd5b6102926001604060020a0360043516610f43565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102d757fe5b60ff16815260200197505050505050505060405180910390f35b34156102fc57600080fd5b6102716001604060020a0360043516602435610fb0565b005b341561032057600080fd5b6102716001604060020a036004358116906024358116906044359060643516611355565b005b341561035157600080fd5b6103656001604060020a0360043516611a12565b6040516001604060020a03909116815260200160405180910390f35b341561038c57600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611bde915050565b6040516001604060020a03909116815260200160405180910390f35b341561045457600080fd5b61023d611dcf565b60405190815260200160405180910390f35b341561047957600080fd5b6102716004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611dda95505050505050565b005b34156104ca57600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611e4d9050565b6040516001604060020a03909116815260200160405180910390f35b34156105a257600080fd5b6102716001604060020a036004351661227d565b005b34156105c357600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a031692506124da915050565b6040516001604060020a03909116815260200160405180910390f35b341561068b57600080fd5b61027160046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506126ca95505050505050565b005b34156106dc57600080fd5b6102716001604060020a036004351660243561273d565b005b341561070057600080fd5b610365600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061298b95505050505050565b6040516001604060020a03909116815260200160405180910390f35b6102716001604060020a03600435811690602435166129d8565b005b341561078757600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612d13915050565b005b341561084457600080fd5b610271600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a03169250612e00915050565b005b34156108ae57600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612e77915050565b005b341561096b57600080fd5b6102716001604060020a0360043516602435612f64565b005b341561098f57600080fd5b6109a36001604060020a036004351661308e565b604051808960028111156109b357fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b83811015610a355780820151818401525b602001610a1c565b50505050905090810190601f168015610a625780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610a995780820151818401525b602001610a80565b50505050905090810190601f168015610ac65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610ae757600080fd5b610271600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061325495505050505050565b005b3415610b3857600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a031692506132c7915050565b005b3415610bf557600080fd5b610bfd6133b4565b604051600160a060020a03909116815260200160405180910390f35b600080610c246148e1565b600080610c30876133c3565b91508160020160018703815481101515610c4657fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a03169450610c7b8561340c565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b505050505092505b50509250925092565b600080610d4c8361340c565b905060005b815460ff166002811115610d6157fe5b1415610d705760009150610dec565b60025b815460ff166002811115610d8357fe5b14610d8a57fe5b6003810154608060020a900460ff1615610da75760019150610dec565b6003810154604060020a90046001604060020a03161515610dcb5760009150610dec565b6003810154610de990604060020a90046001604060020a0316610d40565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610e1d57600080fd5b610e26846133c3565b915060015b600383015460c060020a900460ff166002811115610e4557fe5b14610e4f57600080fd5b836001604060020a0316610e6285613457565b6001604060020a031614610e7557600080fd5b6001820154600283018054610f2e926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610f0857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610ec55790505b505050506003860154600091508190608060020a90046001604060020a03166002613521565b9050610f3b848285613813565b5b5b50505050565b600080600080600080600080610f58896133c3565b8054600182015460028301546003840154929b506001604060020a039182169a5098508082169750604060020a820481169650608060020a820416945060c060020a900460ff16925090505b50919395979092949650565b6000806000610fbe85611a12565b9450610fc9856133c3565b925060005b600384015460c060020a900460ff166002811115610fe857fe5b14610ff257600080fd5b6001830154611009906001604060020a031661340c565b91506111fe826101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60018301546002840180546112b7926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561129157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161124e5790505b505050506003870154600091508190608060020a90046001604060020a03166001613521565b90506112c4858286613813565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b151561133957600080fd5b6102c65a03f1151561134a57600080fd5b5050505b5050505050565b600080600080600061136688611a12565b9750611371886133c3565b945061137c8661340c565b93506113878961340c565b925061157c836101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60005b600386015460c060020a900460ff16600281111561159957fe5b146115a357600080fd5b60018501546001604060020a038a8116911614156116545760005b845460ff1660028111156115ce57fe5b14156115e4576115df888888613925565b61164c565b60025b845460ff1660028111156115f757fe5b141561160d576115df88888861396b565b61164c565b60015b845460ff16600281111561162057fe5b141561164a5761163888888760020180549050613bca565b97506115df888888613cd6565b61164c565bfe5b5b5b5b611a06565b6117858560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561171e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116116db5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561177157fe5b600281111561177c57fe5b9052508a613e0a565b6001604060020a039081169250821461164a5760005b845460ff1660028111156117ab57fe5b14156117e25760018501546001604060020a038781169116146117ca57fe5b6117dc88888760020180549050613bca565b50611a06565b60015b845460ff1660028111156117f557fe5b14156119c15761192c8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156118c557602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118825790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561191857fe5b600281111561192357fe5b90525087613e0a565b6001604060020a03908116915081141561196957611638888860018589600201805490500303613bca565b97506115df888888613cd6565b61164c565b8181111561199a57611638888860018589600201805490500303613bca565b97506115df888888613cd6565b61164c565b81811161164c576117dc888860018489600201805490500303613bca565b505b5b5b611a06565b60025b845460ff1660028111156119d457fe5b141561164a576119f1888860018589600201805490500303613bca565b975061164c888888613e71565b611a06565b5bfe5b5b505050505050505050565b600080600080611a21856133c3565b925060005b600384015460c060020a900460ff166002811115611a4057fe5b14611a4d57849350611bd6565b600383015460006001604060020a03909116118015611a8657506003830154604060020a90046001604060020a0316611a846141d3565b115b15611ba4576001830154600284018054611b43926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b1e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611adb5790505b505050506003870154600091508190608060020a90046001604060020a031681613521565b6003840154909250611b84906001604060020a03166000604051805910611b675750595b908082528060200260200182016040525b50600080866000613521565b9050611b9585828560000154613813565b809450611ba1856133c3565b92505b611bad85613457565b90506001604060020a0380821690861614611bd157611bd185828560000154613813565b5b8093505b505050919050565b600180549081808201611bf183826148f3565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115611c7257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611cb8929160200190614925565b50606082015181600201908051611cd3929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b600080805b8351831015610f3b576001604060020a03848481518110611dfc57fe5b90602001906020020151169150604060020a848481518110611e1a57fe5b90602001906020020151811515611e2d57fe5b049050611e3a8282610fb0565b5b600190920191611ddf565b5b50505050565b6000806001604060020a0385161561208657611e688561340c565b905060025b815460ff166002811115611e7d57fe5b14611e8757600080fd5b601461207c826101006040519081016040528154909190829060ff166002811115611eae57fe5b6002811115611eb957fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f855780601f10611f5a57610100808354040283529160200191611f85565b820191906000526020600020905b815481529060010190602001808311611f6857829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120275780601f10611ffc57610100808354040283529160200191612027565b820191906000526020600020905b81548152906001019060200180831161200a57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526141d8565b1061208657600080fd5b5b6001805492508280820161209b83826148f3565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561211d57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612163929160200190614925565b5060608201518160020190805161217e929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60006122888261340c565b905061247d816101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25b5050565b6001805490818082016124ed83826148f3565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561256e57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516125b4929160200190614925565b506060820151816002019080516125cf929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600080805b8351831015610f3b576001604060020a038484815181106126ec57fe5b90602001906020020151169150604060020a84848151811061270a57fe5b9060200190602002015181151561271d57fe5b04905061272a8282610dfd565b5b6001909201916126cf565b5b50505050565b60008061274984611a12565b9350612754846133c3565b600181015490925061276e906001604060020a031661340c565b9050612963816101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b6003820154610f3b908590608060020a90046001604060020a031685613813565b5b50505050565b600080805b83518210156129d0576001604060020a038483815181106129ad57fe5b906020019060200201511690506129c381611a12565b505b600190910190612990565b5b5050919050565b60008080806001604060020a0386161515612a1e57612a1b6020604051908101604052806000815250602060405190810160405260008082526203f480906124da565b95505b612a278661340c565b9350612c1c846101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60005b845460ff166002811115612c2f57fe5b14612c3957600080fd5b34925060008311612c4957600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515612c7c57600080fd5b612cac866000604051805910612c8f5750595b908082528060200260200182016040525b50600080600080613521565b9150612cb7826133c3565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a3612d0a86838588611355565b5b505050505050565b6000612d1e8661340c565b905060015b815460ff166002811115612d3357fe5b14612d3d57600080fd5b805433600160a060020a039081166101009092041614612d5c57600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612d8f929160200190614925565b5060028101838051612da5929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600080805b8451831015612d0a576001604060020a03858481518110612e2257fe5b90602001906020020151169150604060020a858481518110612e4057fe5b90602001906020020151811515612e5357fe5b049050612e6286838387611355565b5b600190920191612e05565b5b505050505050565b6000612e828661340c565b905060005b815460ff166002811115612e9757fe5b14612ea157600080fd5b805433600160a060020a039081166101009092041614612ec057600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612ef3929160200190614925565b5060028101838051612f09929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600254600090819033600160a060020a03908116911614612f8457600080fd5b612f8d846133c3565b915060015b600383015460c060020a900460ff166002811115612fac57fe5b14612fb657600080fd5b600182015460028301805461306e926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561304957602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116130065790505b505050506003860154600091508190608060020a90046001604060020a031681613521565b9050610f2e81611a12565b9050610f3b848285613813565b5b5b50505050565b6000806130996148e1565b6130a16148e1565b60008060008060006130b28a61340c565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156131685780601f1061313d57610100808354040283529160200191613168565b820191906000526020600020905b81548152906001019060200180831161314b57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132075780601f106131dc57610100808354040283529160200191613207565b820191906000526020600020905b8154815290600101906020018083116131ea57829003601f168201915b50505050600383015460048401549298506001604060020a038082169850604060020a8204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600080805b8351831015610f3b576001604060020a0384848151811061327657fe5b90602001906020020151169150604060020a84848151811061329457fe5b906020019060200201518115156132a757fe5b0490506132b48282612f64565b5b600190920191613259565b5b50505050565b60006132d28661340c565b905060025b815460ff1660028111156132e757fe5b146132f157600080fd5b805433600160a060020a03908116610100909204161461331057600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051613343929160200190614925565b5060028101838051613359929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b600080546001604060020a038316106133db57600080fd5b600080546001604060020a0384169081106133f257fe5b906000526020600020906004020160005b5090505b919050565b6001546000906001604060020a0383161061342657600080fd5b600180546001604060020a03841690811061343d57fe5b906000526020600020906005020160005b5090505b919050565b600080806001604060020a038416151561347457600092506129d0565b61347d846133c3565b6001810154909250613497906001604060020a031661340c565b905060005b815460ff1660028111156134ac57fe5b14156134ba578392506129d0565b60025b815460ff1660028111156134cd57fe5b146134d457fe5b60018201546134eb906001604060020a0316610d40565b15156134f9578392506129d0565b600382015461351790608060020a90046001604060020a0316613457565b92505b5050919050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b8381101561356f5780820151818401525b602001613556565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a0281526008018260028111156135dc57fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a03909116915081111561364557809250613807565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a0383161790558154909190600181016136838382614a23565b916000526020600020906004020160005b60e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a031681526020018860028111156136f557fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a0392909216919091179055604082015181600201908051613740929160200190614a55565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a8360028111156137fb57fe5b02179055505050508092505b50509695505050505050565b6000806000613825600187878761441a565b9250846001604060020a0316866001604060020a0316141561384657612d0a565b82151561385257612d0a565b61385b866133c3565b9150613866856133c3565b82549091508390101561387857600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a36138d3600087878661441a565b505b505050505050565b8060200151600160a060020a031633600160a060020a0316148061391657508060e00151600160a060020a031633600160a060020a0316145b151561392157600080fd5b5b50565b6000610f2e826000604051805910612c8f5750595b908082528060200260200182016040525b50600080600080613521565b9050610f3b848285613813565b5b50505050565b6000806000613979866133c3565b92506014613aad8460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b10613ab757600080fd5b613ac084610d40565b15613aca57600080fd5b6001830154600284018054613b82926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b1e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611adb5790505b505050506003870154600091508190608060020a90046001604060020a031681613521565b9150613bb4846000604051805910611b675750595b908082528060200260200182016040525b50600080866000613521565b9050612d0a868287613813565b5b505050505050565b600080613bd56148e1565b600080613be1886133c3565b6002810154909450869003604051805910613bf95750595b908082528060200260200182016040525b509250600091505b6002840154869003821015613c8a5760028401805483908110613c3157fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613c6757fe5b6001604060020a039092166020928302909101909101525b600190910190613c12565b60018401546003850154613cba916001604060020a039081169186916000918291608060020a9091041681613521565b9050613cc7888289613813565b8094505b505050509392505050565b6000613ce06148e1565b600080613cec876133c3565b600281015490945060149010613d0157600080fd5b6002840154600101604051805910613d165750595b908082528060200260200182016040525b509250600091505b6002840154821015613da45760028401805483908110613d4b57fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613d8157fe5b6001604060020a039092166020928302909101909101525b600190910190613d2f565b60028401548590849081518110613db757fe5b6001604060020a039283166020918202909201015260018501546003860154613df3929182169186916000918291608060020a90041681613521565b90506138d3878288613813565b5b50505050505050565b6000805b836040015151811015613e5f57826001604060020a031684604001518281518110613e3557fe5b906020019060200201516001604060020a03161415613e5657809150613e6a565b5b600101613e0e565b6001604060020a0391505b5092915050565b600080613e7d856133c3565b91506014613fb18360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b10613fbb57600080fd5b613fc483610d40565b15613fce57600080fd5b60018201546002830180546141be926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561406157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161401e5790505b5050505050856141978660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561413157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116140ee5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561418457fe5b600281111561418f57fe5b9052506145ad565b61419f6141d3565b6003880154910190608060020a90046001604060020a03166000613521565b905061134e858286613813565b5b5050505050565b425b90565b60008060025b835160028111156141eb57fe5b146141f257fe5b8260a001516001604060020a0316151561420f5760019150610dec565b61421c8360a0015161340c565b9050610de9816101006040519081016040528154909190829060ff166002811115611eae57fe5b6002811115611eb957fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f855780601f10611f5a57610100808354040283529160200191611f85565b820191906000526020600020905b815481529060010190602001808311611f6857829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120275780601f10611ffc57610100808354040283529160200191612027565b820191906000526020600020905b81548152906001019060200180831161200a57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526141d8565b91505b50919050565b806144288585808685614640565b90506144378584868685614640565b90505b949350505050565b6000808260a001516001604060020a031615156144625760009150610dec565b61446f8360a001516133c3565b90506145a18160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b60010191505b50919050565b60008060006145bf846020015161340c565b60038101546001604060020a031693509150600090505b8360400151518110156129d057614605846040015182815181106145f657fe5b9060200190602002015161340c565b60038101549092506001604060020a03168390111561462f5760038201546001604060020a031692505b5b6001016145d6565b5b5050919050565b600080600080866001604060020a0316886001604060020a0316146146675761010061466a565b60005b61ffff16925084935061467c886133c3565b600181015490925061469c908a906001604060020a031689898789614761565b9350600090505b60028201546001604060020a03821610156147195761470e8983600201836001604060020a03168154811015156146d657fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316898985880160010189614761565b93505b6001016146a3565b600382015460006001604060020a039091161115614754576003820154614751908a906001604060020a0316898960ff880189614761565b93505b5b50505095945050505050565b8060008061476e8861340c565b6004810154909150600160a060020a03161580159061478d5750600083115b15613807578815614848576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b151561481757600080fd5b6102c65a03f1151561482857600080fd5b50505060405180519250508282111561484057600080fd5b819250613807565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b15156148be57600080fd5b6102c65a03f115156148cf57600080fd5b5050505b5b5b50509695505050505050565b60206040519081016040526000815290565b81548183558181151161491f5760050281600502836000526020600020918201910161491f9190614b1f565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061496657805160ff1916838001178555614993565b82800160010185558215614993579182015b82811115614993578251825591602001919060010190614978565b5b506149a0929150614bb1565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061496657805160ff1916838001178555614993565b82800160010185558215614993579182015b82811115614993578251825591602001919060010190614978565b5b506149a0929150614bb1565b5090565b81548183558181151161491f5760040281600402836000526020600020918201910161491f9190614bd2565b5b505050565b82805482825590600052602060002090600301600490048101928215614afd5791602002820160005b83821115614ac857835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302614a7e565b8015614afb5782816101000a8154906001604060020a030219169055600801602081600701049283019260010302614ac8565b505b506149a0929150614c39565b5090565b60206040519081016040526000815290565b610dfa91905b808211156149a057805474ffffffffffffffffffffffffffffffffffffffffff191681556000614b586001830182614c65565b614b66600283016000614c65565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501614b25565b5090565b90565b610dfa91905b808211156149a05760008155600101614bb7565b5090565b90565b610dfa91905b808211156149a057600080825560018201805467ffffffffffffffff19169055614c056002830182614cad565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401614bd8565b5090565b90565b610dfa91905b808211156149a057805467ffffffffffffffff19168155600101614c3f565b5090565b90565b50805460018160011615610100020316600290046000825580601f10614c8b5750613921565b601f0160209004906000526020600020908101906139219190614bb1565b5b50565b5080546000825560030160049004906000526020600020908101906139219190614bb1565b5b505600a165627a7a723058202c436915f1bd792a6b40b5d1db7f01634d3820158d9a722453660e07b6fba7850029" -exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001fb4833981016040528080519150505b60016200003681806200006a565b506001620000466000826200009f565b5060028054600160a060020a031916600160a060020a0383161790555b5062000255565b8154818355818115116200009957600502816005028360005260206000209182019101620000999190620000d4565b5b505050565b815481835581811511620000995760040281600402836000526020600020918201910162000099919062000148565b5b505050565b6200014591905b8082111562000141578054600160a860020a03191681556000620001036001830182620001ba565b62000113600283016000620001ba565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000db565b5090565b90565b6200014591905b808211156200014157600080825560018201805467ffffffffffffffff191690556200017f600283018262000206565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014f565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001e2575062000202565b601f01602090049060005260206000209081019062000202919062000231565b5b50565b50805460008255600301600490049060005260206000209081019062000202919062000231565b5b50565b6200014591905b8082111562000141576000815560010162000238565b5090565b90565b611d4f80620002656000396000f300606060405236156100c25763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c75780632101a6ad146101835780632a8ec8cc146101b75780633f657a46146101dc57806352dc7dcc1461025c5780635503d9ba1461032657806372116e921461034b5780637f61fa9314610425578063cc19ecf7146104ef578063db7c2314146105ae578063eba8ba061461066d578063f6b24b1c146107c7578063fbfa77cf14610886575b600080fd5b34156100d257600080fd5b6100ea67ffffffffffffffff600435166024356108b5565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101465780820151818401525b60200161012d565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018e57600080fd5b6101a367ffffffffffffffff600435166109dd565b604051901515815260200160405180910390f35b34156101c257600080fd5b6101ca610a9b565b60405190815260200160405180910390f35b34156101e757600080fd5b6101fc67ffffffffffffffff60043516610aa6565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024257fe5b60ff16815260200197505050505050505060405180910390f35b341561026757600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610b2e915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033157600080fd5b6101ca610d24565b60405190815260200160405180910390f35b341561035657600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610d2f9050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561043057600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a0316925061116b915050565b60405167ffffffffffffffff909116815260200160405180910390f35b34156104fa57600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611360915050565b005b34156105b957600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061144e915050565b005b341561067857600080fd5b61068d67ffffffffffffffff6004351661153c565b6040518089600281111561069d57fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156107205780820151818401525b602001610707565b50505050905090810190601f16801561074d5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b838110156107845780820151818401525b60200161076b565b50505050905090810190601f1680156107b15780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34156107d257600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611708915050565b005b341561089157600080fd5b6108996117f6565b604051600160a060020a03909116815260200160405180910390f35b6000806108c0611ae6565b6000806108cc87611805565b915081600201600187038154811015156108e257fe5b90600052602060002090600491828204019190066008025b9054906101000a900467ffffffffffffffff16945061091885611850565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109cc5780601f106109a1576101008083540402835291602001916109cc565b820191906000526020600020905b8154815290600101906020018083116109af57829003601f168201915b505050505092505b50509250925092565b6000806109e983611850565b905060005b815460ff1660028111156109fe57fe5b1415610a0d5760009150610a95565b60025b815460ff166002811115610a2057fe5b14610a2757fe5b6003810154608060020a900460ff1615610a445760019150610a95565b600381015468010000000000000000900467ffffffffffffffff161515610a6e5760009150610a95565b6003810154610a929068010000000000000000900467ffffffffffffffff166109dd565b91505b50919050565b600054600019015b90565b600080600080600080600080610abb89611805565b8054600182015460028301546003840154929b5067ffffffffffffffff9182169a509850808216975068010000000000000000820481169650608060020a82041694507801000000000000000000000000000000000000000000000000900460ff16925090505b50919395979092949650565b600180549081808201610b418382611af8565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610bc357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610c09929160200190611b2a565b50606082015181600201908051610c24929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b60008067ffffffffffffffff851615610f6f57610d4b85611850565b905060025b815460ff166002811115610d6057fe5b14610d6a57600080fd5b6014610f65826101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b10610f6f57600080fd5b5b60018054925082808201610f848382611af8565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561100757fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a031990911617815560408201518160010190805161104d929160200190611b2a565b50606082015181600201908051611068929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60018054908180820161117e8382611af8565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561120057fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611246929160200190611b2a565b50606082015181600201908051611261929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600061136b86611850565b905060015b815460ff16600281111561138057fe5b1461138a57600080fd5b805433600160a060020a0390811661010090920416146113a957600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113dc929160200190611b2a565b50600281018380516113f2929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600061145986611850565b905060005b815460ff16600281111561146e57fe5b1461147857600080fd5b805433600160a060020a03908116610100909204161461149757600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516114ca929160200190611b2a565b50600281018380516114e0929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600080611547611ae6565b61154f611ae6565b60008060008060006115608a611850565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156116165780601f106115eb57610100808354040283529160200191611616565b820191906000526020600020905b8154815290600101906020018083116115f957829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b505050506003830154600484015492985067ffffffffffffffff8082169850680100000000000000008204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600061171386611850565b905060025b815460ff16600281111561172857fe5b1461173257600080fd5b805433600160a060020a03908116610100909204161461175157600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051611784929160200190611b2a565b506002810183805161179a929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff83161061181e57600080fd5b6000805467ffffffffffffffff841690811061183657fe5b906000526020600020906004020160005b5090505b919050565b60015460009067ffffffffffffffff83161061186b57600080fd5b6001805467ffffffffffffffff841690811061188357fe5b906000526020600020906005020160005b5090505b919050565b60008060025b835160028111156118b057fe5b146118b757fe5b8260a0015167ffffffffffffffff1615156118d55760019150610a95565b6118e28360a00151611850565b9050610a92816101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b91505b50919050565b60206040519081016040526000815290565b815481835581811511611b2457600502816005028360005260206000209182019101611b249190611c28565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b610aa391905b80821115611ba557805474ffffffffffffffffffffffffffffffffffffffffff191681556000611c616001830182611cdb565b611c6f600283016000611cdb565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611c2e565b5090565b90565b610aa391905b80821115611ba55760008155600101611cc0565b5090565b90565b50805460018160011615610100020316600290046000825580601f10611d015750611d1f565b601f016020900490600052602060002090810190611d1f9190611cba565b5b505600a165627a7a72305820a55ae68922ba313e34ff78d19cf73d0f517bf9c973505ad242c28d16f46005600029" -exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"type":"function"},{"payable":true,"type":"fallback"}] +exports.LiquidPledgingAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingByteCode = "0x606060405234156200001057600080fd5b6040516020806200434483398101604052808051915081905060016200003781806200006f565b50600162000047600082620000a3565b5060028054600160a060020a031916600160a060020a0392909216919091179055506200023b565b8154818355818115116200009e576005028160050283600052602060002091820191016200009e9190620000d2565b505050565b8154818355818115116200009e576004028160040283600052602060002091820191016200009e919062000146565b6200014391905b808211156200013f578054600160a860020a03191681556000620001016001830182620001b1565b62000111600283016000620001b1565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000d9565b5090565b90565b6200014391905b808211156200013f57600080825560018201805467ffffffffffffffff191690556200017d6002830182620001fc565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014d565b50805460018160011615610100020316600290046000825580601f10620001d95750620001f9565b601f016020900490600052602060002090810190620001f991906200021e565b50565b508054600082556003016004900490600052602060002090810190620001f991905b6200014391905b808211156200013f576000815560010162000225565b6140f9806200024b6000396000f30060606040526004361061013a5763ffffffff60e060020a60003504166314e7b1dc811461013f5780632101a6ad146101f85780632a8ec8cc1461022b5780632ee88808146102505780633f657a461461027457806343387983146102f257806347c5ef431461031457806350f8a8031461034357806352dc7dcc1461037e5780635503d9ba1461042a57806357adafb61461043d57806372116e921461048c578063796d5654146105485780637f61fa93146105675780639398f5a214610613578063af9f456314610662578063bce0906d14610684578063bde60ac9146106d3578063cc19ecf7146106ed578063d639cd73146107a8578063db7c231414610810578063e9c211e2146108cb578063eba8ba06146108ed578063ef3766e414610a43578063f6b24b1c14610a92578063fbfa77cf14610b4d575b600080fd5b341561014a57600080fd5b6101616001604060020a0360043516602435610b7c565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101bb5780820151838201526020016101a3565b50505050905090810190601f1680156101e85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561020357600080fd5b6102176001604060020a0360043516610ca1565b604051901515815260200160405180910390f35b341561023657600080fd5b61023e610d51565b60405190815260200160405180910390f35b341561025b57600080fd5b6102726001604060020a0360043516602435610d5c565b005b341561027f57600080fd5b6102936001604060020a0360043516610e9f565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102d857fe5b60ff16815260200197505050505050505060405180910390f35b34156102fd57600080fd5b6102726001604060020a0360043516602435610f04565b341561031f57600080fd5b6102726001604060020a0360043581169060243581169060443590606435166112a7565b341561034e57600080fd5b6103626001604060020a036004351661174c565b6040516001604060020a03909116815260200160405180910390f35b341561038957600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611915915050565b341561043557600080fd5b61023e611b03565b341561044857600080fd5b6102726004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611b0d95505050505050565b341561049757600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611b789050565b341561055357600080fd5b6102726001604060020a0360043516611fa3565b341561057257600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250612031915050565b341561061e57600080fd5b610272600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061221e95505050505050565b341561066d57600080fd5b6102726001604060020a0360043516602435612289565b341561068f57600080fd5b610362600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061233595505050505050565b6102726001604060020a0360043581169060243516612380565b34156106f857600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a031692506124ea915050565b34156107b357600080fd5b610272600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a031692506125d5915050565b341561081b57600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612642915050565b34156108d657600080fd5b6102726001604060020a036004351660243561272d565b34156108f857600080fd5b61090c6001604060020a0360043516612841565b6040518089600281111561091c57fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b8381101561099d578082015183820152602001610985565b50505050905090810190601f1680156109ca5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610a005780820151838201526020016109e8565b50505050905090810190601f168015610a2d5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610a4e57600080fd5b6102726004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650612a0695505050505050565b3415610a9d57600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612a71915050565b3415610b5857600080fd5b610b60612b5c565b604051600160a060020a03909116815260200160405180910390f35b600080610b87613d99565b600080610b9387612b6b565b91508160020160018703815481101515610ba957fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169450610bdd85612baf565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b5050505050925050509250925092565b600080610cad83612baf565b90506000815460ff166002811115610cc157fe5b1415610cd05760009150610d4b565b6002815460ff166002811115610ce257fe5b14610ce957fe5b6003810154608060020a900460ff1615610d065760019150610d4b565b6003810154604060020a90046001604060020a03161515610d2a5760009150610d4b565b6003810154610d4890604060020a90046001604060020a0316610ca1565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610d7c57600080fd5b610d8584612b6b565b91506001600383015460c060020a900460ff166002811115610da357fe5b14610dad57600080fd5b836001604060020a0316610dc085612bf5565b6001604060020a031614610dd357600080fd5b6001820154600283018054610e8c926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610e6657602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610e235790505b505050506003860154600091508190608060020a90046001604060020a03166002612cbb565b9050610e99848285612fab565b50505050565b600080600080600080600080610eb489612b6b565b805460018201546002830154600390930154919c6001604060020a039182169c50929a508082169950604060020a820481169850608060020a820416965060c060020a900460ff16945092505050565b6000806000610f128561174c565b9450610f1d85612b6b565b92506000600384015460c060020a900460ff166002811115610f3b57fe5b14610f4557600080fd5b6001830154610f5c906001604060020a0316612baf565b9150611151826101006040519081016040528154909190829060ff166002811115610f8357fe5b6002811115610f8e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561105a5780601f1061102f5761010080835404028352916020019161105a565b820191906000526020600020905b81548152906001019060200180831161103d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110fc5780601f106110d1576101008083540402835291602001916110fc565b820191906000526020600020905b8154815290600101906020018083116110df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152613074565b600183015460028401805461120a926001604060020a031691906020808202016040519081016040528092919081815260200182805480156111e457602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116111a15790505b505050506003870154600091508190608060020a90046001604060020a03166001612cbb565b9050611217858286612fab565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b151561128c57600080fd5b6102c65a03f1151561129d57600080fd5b5050505050505050565b60008060008060006112b88861174c565b97506112c388612b6b565b94506112ce86612baf565b93506112d989612baf565b9250611300836101006040519081016040528154909190829060ff166002811115610f8357fe5b6000600386015460c060020a900460ff16600281111561131c57fe5b1461132657600080fd5b60018501546001604060020a038a8116911614156113c7576000845460ff16600281111561135057fe5b1415611366576113618888886130bb565b6113c2565b6002845460ff16600281111561137857fe5b1415611389576113618888886130eb565b6001845460ff16600281111561139b57fe5b14156113c0576113b388888760020180549050613314565b9750611361888888613419565bfe5b611741565b6114f88560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561149157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161144e5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156114e457fe5b60028111156114ef57fe5b9052508a613540565b6001604060020a03908116925082146113c0576000845460ff16600281111561151d57fe5b14156115545760018501546001604060020a0387811691161461153c57fe5b61154e88888760020180549050613314565b50611741565b6001845460ff16600281111561156657fe5b14156117055761169d8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561163657602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116115f35790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561168957fe5b600281111561169457fe5b90525087613540565b6001604060020a0390811691508114156116c8576113b3888860018589600201805490500303613314565b818111156116e7576113b3888860018589600201805490500303613314565b8181116113c25761154e888860018489600201805490500303613314565b6002845460ff16600281111561171757fe5b14156113c057611734888860018589600201805490500303613314565b97506113c28888886135a6565b505050505050505050565b60008060008061175b85612b6b565b92506000600384015460c060020a900460ff16600281111561177957fe5b146117865784935061190d565b600383015460006001604060020a039091161180156117bf57506003830154604060020a90046001604060020a03166117bd6138b5565b115b156118dc57600183015460028401805461187c926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561185757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118145790505b505050506003870154600091508190608060020a90046001604060020a031681612cbb565b60038401549092506118bc906001604060020a031660006040518059106118a05750595b9080825280602002602001820160405250600080866000612cbb565b90506118cd85828560000154612fab565b8094506118d985612b6b565b92505b6118e585612bf5565b90506001604060020a03808216908616146119095761190985828560000154612fab565b8093505b505050919050565b6001805490818082016119288382613dab565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156119a757fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516119ed929160200190613ddc565b50606082015181600201908051611a08929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b600080805b8351831015610e99576001604060020a03848481518110611b2f57fe5b90602001906020020151169150604060020a848481518110611b4d57fe5b90602001906020020151811515611b6057fe5b049050611b6d8282610f04565b600190920191611b12565b6000806001604060020a03851615611db057611b9385612baf565b90506002815460ff166002811115611ba757fe5b14611bb157600080fd5b6014611da6826101006040519081016040528154909190829060ff166002811115611bd857fe5b6002811115611be357fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611caf5780601f10611c8457610100808354040283529160200191611caf565b820191906000526020600020905b815481529060010190602001808311611c9257829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d515780601f10611d2657610100808354040283529160200191611d51565b820191906000526020600020905b815481529060010190602001808311611d3457829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138b9565b10611db057600080fd5b60018054925082808201611dc48382613dab565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115611e4457fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611e8a929160200190613ddc565b50606082015181600201908051611ea5929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b6000611fae82612baf565b9050611fd5816101006040519081016040528154909190829060ff166002811115610f8357fe5b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25050565b6001805490818082016120448382613dab565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156120c357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612109929160200190613ddc565b50606082015181600201908051612124929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b600080805b8351831015610e99576001604060020a0384848151811061224057fe5b90602001906020020151169150604060020a84848151811061225e57fe5b9060200190602002015181151561227157fe5b04905061227e8282610d5c565b600190920191612223565b60008060006122978561174c565b94506122a285612b6b565b6003810154909350608060020a90046001604060020a031615156122c557600080fd5b60018301546122dc906001604060020a0316612baf565b9150612303826101006040519081016040528154909190829060ff166002811115610f8357fe5b600383015461232190608060020a90046001604060020a0316612bf5565b905061232e858286612fab565b5050505050565b600080805b8351821015612379576001604060020a0384838151811061235757fe5b9060200190602002015116905061236d8161174c565b5060019091019061233a565b5050919050565b60008080806001604060020a03861615156123c6576123c36020604051908101604052806000815250602060405190810160405260008082526203f48090612031565b95505b6123cf86612baf565b93506123f6846101006040519081016040528154909190829060ff166002811115610f8357fe5b6000845460ff16600281111561240857fe5b1461241257600080fd5b3492506000831161242257600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f19350505050151561245557600080fd5b6124848660006040518059106124685750595b9080825280602002602001820160405250600080600080612cbb565b915061248f82612b6b565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a36124e2868385886112a7565b505050505050565b60006124f586612baf565b90506001815460ff16600281111561250957fe5b1461251357600080fd5b805433600160a060020a03908116610100909204161461253257600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612565929160200190613ddc565b506002810183805161257b929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b600080805b84518310156124e2576001604060020a038584815181106125f757fe5b90602001906020020151169150604060020a85848151811061261557fe5b9060200190602002015181151561262857fe5b049050612637868383876112a7565b6001909201916125da565b600061264d86612baf565b90506000815460ff16600281111561266157fe5b1461266b57600080fd5b805433600160a060020a03908116610100909204161461268a57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516126bd929160200190613ddc565b50600281018380516126d3929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b600254600090819033600160a060020a0390811691161461274d57600080fd5b61275684612b6b565b91506001600383015460c060020a900460ff16600281111561277457fe5b1461277e57600080fd5b6001820154600283018054612836926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561281157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116127ce5790505b505050506003860154600091508190608060020a90046001604060020a031681612cbb565b9050610e8c8161174c565b60008061284c613d99565b612854613d99565b60008060008060006128658a612baf565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f8201819004810201604051908101604052809291908181526020018280546001816001161561010002031660029004801561291b5780601f106128f05761010080835404028352916020019161291b565b820191906000526020600020905b8154815290600101906020018083116128fe57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ba5780601f1061298f576101008083540402835291602001916129ba565b820191906000526020600020905b81548152906001019060200180831161299d57829003601f168201915b5050505060038301546004909301549a9c999b50979990986001604060020a038084169950604060020a8404169750608060020a90920460ff169550600160a060020a03169350915050565b600080805b8351831015610e99576001604060020a03848481518110612a2857fe5b90602001906020020151169150604060020a848481518110612a4657fe5b90602001906020020151811515612a5957fe5b049050612a66828261272d565b600190920191612a0b565b6000612a7c86612baf565b90506002815460ff166002811115612a9057fe5b14612a9a57600080fd5b805433600160a060020a039081166101009092041614612ab957600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612aec929160200190613ddc565b5060028101838051612b02929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b600080546001604060020a03831610612b8357600080fd5b600080546001604060020a038416908110612b9a57fe5b90600052602060002090600402019050919050565b6001546000906001604060020a03831610612bc957600080fd5b600180546001604060020a038416908110612be057fe5b90600052602060002090600502019050919050565b600080806001604060020a0384161515612c125760009250612379565b612c1b84612b6b565b6001810154909250612c35906001604060020a0316612baf565b90506000815460ff166002811115612c4957fe5b1415612c5757839250612379565b6002815460ff166002811115612c6957fe5b14612c7057fe5b6001820154612c87906001604060020a0316610ca1565b1515612c9557839250612379565b6003820154612cb390608060020a90046001604060020a0316612bf5565b949350505050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b83811015612d08578082015183820152602001612cf0565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a028152600801826002811115612d7557fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a039091169150811115612dde57809250612f9f565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a038316179055815490919060018101612e1c8382613e5a565b9160005260206000209060040201600060e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a03168152602001886002811115612e8d57fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a0392909216919091179055604082015181600201908051612ed8929160200190613e86565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a836002811115612f9357fe5b02179055505050508092505b50509695505050505050565b6000806000612fbd6001878787613923565b9250846001604060020a0316866001604060020a03161415612fde576124e2565b821515612fea576124e2565b612ff386612b6b565b9150612ffe85612b6b565b82549091508390101561301057600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a361306b6000878786613923565b50505050505050565b8060200151600160a060020a031633600160a060020a031614806130ad57508060e00151600160a060020a031633600160a060020a0316145b15156130b857600080fd5b50565b6000610e8c8260006040518059106124685750599080825280602002602001820160405250600080600080612cbb565b60008060006130f986612b6b565b9250601461322d8460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116131845790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b600281111561322557fe5b905250613949565b1061323757600080fd5b61324084610ca1565b1561324a57600080fd5b60018301546002840180546132d7926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561185757600091825260209182902080546001604060020a031684529082028301929091600891018084116118145750505050600388015460009250829150608060020a90046001604060020a031681612cbb565b91506133078460006040518059106118a05750599080825280602002602001820160405250600080866000612cbb565b90506124e2868287612fab565b60008061331f613d99565b60008061332b88612b6b565b60028101549094508690036040518059106133435750595b90808252806020026020018201604052509250600091505b60028401548690038210156133d1576002840180548390811061337a57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03168383815181106133af57fe5b6001604060020a0390921660209283029091019091015260019091019061335b565b60018401546003850154613401916001604060020a039081169186916000918291608060020a9091041681612cbb565b905061340e888289612fab565b979650505050505050565b6000613423613d99565b60008061342f87612b6b565b60028101549094506014901061344457600080fd5b60028401546001016040518059106134595750595b90808252806020026020018201604052509250600091505b60028401548210156134e4576002840180548390811061348d57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03168383815181106134c257fe5b6001604060020a03909216602092830290910190910152600190910190613471565b600284015485908490815181106134f757fe5b6001604060020a039283166020918202909201015260018501546003860154613533929182169186916000918291608060020a90041681612cbb565b905061306b878288612fab565b6000805b83604001515181101561359457826001604060020a03168460400151828151811061356b57fe5b906020019060200201516001604060020a0316141561358c5780915061359f565b600101613544565b6001604060020a0391505b5092915050565b6000806135b285612b6b565b915060146136a88360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757600091825260209182902080546001604060020a031684529082028301929091600891018084116131845750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b106136b257600080fd5b6136bb83610ca1565b156136c557600080fd5b6001820154600283018054612321926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561375857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116137155790505b50505050508561388e8660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561382857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116137e55790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561387b57fe5b600281111561388657fe5b905250613a74565b6138966138b5565b6003880154910190608060020a90046001604060020a03166000612cbb565b4290565b6000806002835160028111156138cb57fe5b146138d257fe5b8260a001516001604060020a031615156138ef5760019150610d4b565b6138fc8360a00151612baf565b9050610d48816101006040519081016040528154909190829060ff166002811115611bd857fe5b806139318585808685613afe565b90506139408584868685613afe565b95945050505050565b6000808260a001516001604060020a031615156139695760009150610d4b565b6139768360a00151612b6b565b9050613a6a8160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757600091825260209182902080546001604060020a031684529082028301929091600891018084116131845750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b6001019392505050565b6000806000613a868460200151612baf565b60038101546001604060020a031693509150600090505b83604001515181101561237957613acc84604001518281518110613abd57fe5b90602001906020020151612baf565b60038101549092506001604060020a031683901115613af65760038201546001604060020a031692505b600101613a9d565b600080600080866001604060020a0316886001604060020a031614613b2557610100613b28565b60005b61ffff169250849350613b3a88612b6b565b6001810154909250613b5a908a906001604060020a031689898789613c1c565b9350600090505b60028201546001604060020a0382161015613bd557613bcb8983600201836001604060020a0316815481101515613b9457fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316898985880160010189613c1c565b9350600101613b61565b600382015460006001604060020a039091161115613c10576003820154613c0d908a906001604060020a0316898960ff880189613c1c565b93505b50505095945050505050565b80600080613c2988612baf565b6004810154909150600160a060020a031615801590613c485750600083115b15612f9f578815613d03576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b1515613cd257600080fd5b6102c65a03f11515613ce357600080fd5b505050604051805192505082821115613cfb57600080fd5b819250612f9f565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b1515613d7957600080fd5b6102c65a03f11515613d8a57600080fd5b50505050509695505050505050565b60206040519081016040526000815290565b815481835581811511613dd757600502816005028360005260206000209182019101613dd79190613f3a565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e1d57805160ff1916838001178555613e4a565b82800160010185558215613e4a579182015b82811115613e4a578251825591602001919060010190613e2f565b50613e56929150613fc5565b5090565b815481835581811511613dd757600402816004028360005260206000209182019101613dd79190613fdf565b82805482825590600052602060002090600301600490048101928215613f2e5791602002820160005b83821115613ef957835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302613eaf565b8015613f2c5782816101000a8154906001604060020a030219169055600801602081600701049283019260010302613ef9565b505b50613e5692915061403f565b610d5991905b80821115613e5657805474ffffffffffffffffffffffffffffffffffffffffff191681556000613f736001830182614064565b613f81600283016000614064565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501613f40565b610d5991905b80821115613e565760008155600101613fcb565b610d5991905b80821115613e5657600080825560018201805467ffffffffffffffff1916905561401260028301826140a8565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401613fe5565b610d5991905b80821115613e5657805467ffffffffffffffff19168155600101614045565b50805460018160011615610100020316600290046000825580601f1061408a57506130b8565b601f0160209004906000526020600020908101906130b89190613fc5565b5080546000825560030160049004906000526020600020908101906130b89190613fc55600a165627a7a723058204d4b9a70b100a8aeb242b9259b86804bc77b7d1932bb1a401fd8dd6901da34300029" +exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001cb0833981016040528080519150600190506200003681806200006d565b50600162000046600082620000a1565b5060028054600160a060020a031916600160a060020a039290921691909117905562000239565b8154818355818115116200009c576005028160050283600052602060002091820191016200009c9190620000d0565b505050565b8154818355818115116200009c576004028160040283600052602060002091820191016200009c919062000144565b6200014191905b808211156200013d578054600160a860020a03191681556000620000ff6001830182620001af565b6200010f600283016000620001af565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000d7565b5090565b90565b6200014191905b808211156200013d57600080825560018201805467ffffffffffffffff191690556200017b6002830182620001fa565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014b565b50805460018160011615610100020316600290046000825580601f10620001d75750620001f7565b601f016020900490600052602060002090810190620001f791906200021c565b50565b508054600082556003016004900490600052602060002090810190620001f791905b6200014191905b808211156200013d576000815560010162000223565b611a6780620002496000396000f3006060604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c95780632101a6ad146101845780632a8ec8cc146101b85780633f657a46146101dd57806352dc7dcc1461025d5780635503d9ba1461032757806372116e921461033a5780637f61fa93146103f7578063cc19ecf7146104a4578063db7c231414610563578063eba8ba0614610620578063f6b24b1c14610778578063fbfa77cf14610835575b600080fd5b34156100d457600080fd5b6100ec67ffffffffffffffff60043516602435610864565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b8381101561014757808201518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018f57600080fd5b6101a467ffffffffffffffff6004351661098a565b604051901515815260200160405180910390f35b34156101c357600080fd5b6101cb610a46565b60405190815260200160405180910390f35b34156101e857600080fd5b6101fd67ffffffffffffffff60043516610a51565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024357fe5b60ff16815260200197505050505050505060405180910390f35b341561026857600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610ad1915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033257600080fd5b6101cb610cc4565b341561034557600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610cce9050565b341561040257600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250611105915050565b34156104af57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506112f7915050565b005b341561056e57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506113e3915050565b341561062b57600080fd5b61064067ffffffffffffffff600435166114cf565b6040518089600281111561065057fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156106d25780820151838201526020016106ba565b50505050905090810190601f1680156106ff5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561073557808201518382015260200161071d565b50505050905090810190601f1680156107625780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b341561078357600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061169a915050565b341561084057600080fd5b610848611786565b604051600160a060020a03909116815260200160405180910390f35b60008061086f61188e565b60008061087b87611795565b9150816002016001870381548110151561089157fe5b90600052602060002090600491828204019190066008029054906101000a900467ffffffffffffffff1694506108c6856117db565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050925050509250925092565b600080610996836117db565b90506000815460ff1660028111156109aa57fe5b14156109b95760009150610a40565b6002815460ff1660028111156109cb57fe5b146109d257fe5b6003810154608060020a900460ff16156109ef5760019150610a40565b600381015468010000000000000000900467ffffffffffffffff161515610a195760009150610a40565b6003810154610a3d9068010000000000000000900467ffffffffffffffff1661098a565b91505b50919050565b600054600019015b90565b600080600080600080600080610a6689611795565b805460018201546002830154600390930154919c67ffffffffffffffff9182169c50929a50808216995068010000000000000000820481169850608060020a82041696507801000000000000000000000000000000000000000000000000900460ff16945092505050565b600180549081808201610ae483826118a0565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610b6457fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610baa9291602001906118d1565b50606082015181600201908051610bc59291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b60008067ffffffffffffffff851615610f0d57610cea856117db565b90506002815460ff166002811115610cfe57fe5b14610d0857600080fd5b6014610f03826101006040519081016040528154909190829060ff166002811115610d2f57fe5b6002811115610d3a57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e065780601f10610ddb57610100808354040283529160200191610e06565b820191906000526020600020905b815481529060010190602001808311610de957829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152611823565b10610f0d57600080fd5b60018054925082808201610f2183826118a0565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115610fa257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610fe89291602001906118d1565b506060820151816002019080516110039291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b60018054908180820161111883826118a0565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561119857fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516111de9291602001906118d1565b506060820151816002019080516111f99291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b6000611302866117db565b90506001815460ff16600281111561131657fe5b1461132057600080fd5b805433600160a060020a03908116610100909204161461133f57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113729291602001906118d1565b50600281018380516113889291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b60006113ee866117db565b90506000815460ff16600281111561140257fe5b1461140c57600080fd5b805433600160a060020a03908116610100909204161461142b57600080fd5b805461010060a860020a031916610100600160a060020a038716021781556001810184805161145e9291602001906118d1565b50600281018380516114749291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b6000806114da61188e565b6114e261188e565b60008060008060006114f38a6117db565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a95780601f1061157e576101008083540402835291602001916115a9565b820191906000526020600020905b81548152906001019060200180831161158c57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b5050505060038301546004909301549a9c999b509799909867ffffffffffffffff8084169950680100000000000000008404169750608060020a90920460ff169550600160a060020a03169350915050565b60006116a5866117db565b90506002815460ff1660028111156116b957fe5b146116c357600080fd5b805433600160a060020a0390811661010090920416146116e257600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516117159291602001906118d1565b506002810183805161172b9291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff8316106117ae57600080fd5b6000805467ffffffffffffffff84169081106117c657fe5b90600052602060002090600402019050919050565b60015460009067ffffffffffffffff8316106117f657600080fd5b6001805467ffffffffffffffff841690811061180e57fe5b90600052602060002090600502019050919050565b60008060028351600281111561183557fe5b1461183c57fe5b8260a0015167ffffffffffffffff16151561185a5760019150610a40565b6118678360a001516117db565b9050610a3d816101006040519081016040528154909190829060ff166002811115610d2f57fe5b60206040519081016040526000815290565b8154818355818115116118cc576005028160050283600052602060002091820191016118cc919061194f565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061191257805160ff191683800117855561193f565b8280016001018555821561193f579182015b8281111561193f578251825591602001919060010190611924565b5061194b9291506119da565b5090565b610a4e91905b8082111561194b57805474ffffffffffffffffffffffffffffffffffffffffff19168155600061198860018301826119f4565b6119966002830160006119f4565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611955565b610a4e91905b8082111561194b57600081556001016119e0565b50805460018160011615610100020316600290046000825580601f10611a1a5750611a38565b601f016020900490600052602060002090810190611a3891906119da565b505600a165627a7a7230582048208e1b0e29be87e62a0a6ddee714204159b7252927614aeff513586ef533890029" +exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}] exports.VaultByteCode = "0x" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" -exports._sha256 = "0x3719452f967025bd63183ec6e8e365cbb4558eb6426dba7749a47ab2d8ba80e0" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" +exports._sha256 = "0xf779b1ee136d7b63203d65207b5b9960eb240ff89493b65181a48999808f4fa1" diff --git a/build/LiquidPledgingBase.sol.js b/build/LiquidPledgingBase.sol.js index 5768643..ebddda1 100644 --- a/build/LiquidPledgingBase.sol.js +++ b/build/LiquidPledgingBase.sol.js @@ -1,10 +1,10 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"type":"function"}] +exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] exports.ILiquidPledgingPluginByteCode = "0x" -exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001fb4833981016040528080519150505b60016200003681806200006a565b506001620000466000826200009f565b5060028054600160a060020a031916600160a060020a0383161790555b5062000255565b8154818355818115116200009957600502816005028360005260206000209182019101620000999190620000d4565b5b505050565b815481835581811511620000995760040281600402836000526020600020918201910162000099919062000148565b5b505050565b6200014591905b8082111562000141578054600160a860020a03191681556000620001036001830182620001ba565b62000113600283016000620001ba565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000db565b5090565b90565b6200014591905b808211156200014157600080825560018201805467ffffffffffffffff191690556200017f600283018262000206565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014f565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001e2575062000202565b601f01602090049060005260206000209081019062000202919062000231565b5b50565b50805460008255600301600490049060005260206000209081019062000202919062000231565b5b50565b6200014591905b8082111562000141576000815560010162000238565b5090565b90565b611d4f80620002656000396000f300606060405236156100c25763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c75780632101a6ad146101835780632a8ec8cc146101b75780633f657a46146101dc57806352dc7dcc1461025c5780635503d9ba1461032657806372116e921461034b5780637f61fa9314610425578063cc19ecf7146104ef578063db7c2314146105ae578063eba8ba061461066d578063f6b24b1c146107c7578063fbfa77cf14610886575b600080fd5b34156100d257600080fd5b6100ea67ffffffffffffffff600435166024356108b5565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101465780820151818401525b60200161012d565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018e57600080fd5b6101a367ffffffffffffffff600435166109dd565b604051901515815260200160405180910390f35b34156101c257600080fd5b6101ca610a9b565b60405190815260200160405180910390f35b34156101e757600080fd5b6101fc67ffffffffffffffff60043516610aa6565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024257fe5b60ff16815260200197505050505050505060405180910390f35b341561026757600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610b2e915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033157600080fd5b6101ca610d24565b60405190815260200160405180910390f35b341561035657600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610d2f9050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561043057600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a0316925061116b915050565b60405167ffffffffffffffff909116815260200160405180910390f35b34156104fa57600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611360915050565b005b34156105b957600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061144e915050565b005b341561067857600080fd5b61068d67ffffffffffffffff6004351661153c565b6040518089600281111561069d57fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156107205780820151818401525b602001610707565b50505050905090810190601f16801561074d5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b838110156107845780820151818401525b60200161076b565b50505050905090810190601f1680156107b15780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34156107d257600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611708915050565b005b341561089157600080fd5b6108996117f6565b604051600160a060020a03909116815260200160405180910390f35b6000806108c0611ae6565b6000806108cc87611805565b915081600201600187038154811015156108e257fe5b90600052602060002090600491828204019190066008025b9054906101000a900467ffffffffffffffff16945061091885611850565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109cc5780601f106109a1576101008083540402835291602001916109cc565b820191906000526020600020905b8154815290600101906020018083116109af57829003601f168201915b505050505092505b50509250925092565b6000806109e983611850565b905060005b815460ff1660028111156109fe57fe5b1415610a0d5760009150610a95565b60025b815460ff166002811115610a2057fe5b14610a2757fe5b6003810154608060020a900460ff1615610a445760019150610a95565b600381015468010000000000000000900467ffffffffffffffff161515610a6e5760009150610a95565b6003810154610a929068010000000000000000900467ffffffffffffffff166109dd565b91505b50919050565b600054600019015b90565b600080600080600080600080610abb89611805565b8054600182015460028301546003840154929b5067ffffffffffffffff9182169a509850808216975068010000000000000000820481169650608060020a82041694507801000000000000000000000000000000000000000000000000900460ff16925090505b50919395979092949650565b600180549081808201610b418382611af8565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610bc357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610c09929160200190611b2a565b50606082015181600201908051610c24929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b60008067ffffffffffffffff851615610f6f57610d4b85611850565b905060025b815460ff166002811115610d6057fe5b14610d6a57600080fd5b6014610f65826101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b10610f6f57600080fd5b5b60018054925082808201610f848382611af8565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561100757fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a031990911617815560408201518160010190805161104d929160200190611b2a565b50606082015181600201908051611068929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60018054908180820161117e8382611af8565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561120057fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611246929160200190611b2a565b50606082015181600201908051611261929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600061136b86611850565b905060015b815460ff16600281111561138057fe5b1461138a57600080fd5b805433600160a060020a0390811661010090920416146113a957600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113dc929160200190611b2a565b50600281018380516113f2929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600061145986611850565b905060005b815460ff16600281111561146e57fe5b1461147857600080fd5b805433600160a060020a03908116610100909204161461149757600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516114ca929160200190611b2a565b50600281018380516114e0929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600080611547611ae6565b61154f611ae6565b60008060008060006115608a611850565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156116165780601f106115eb57610100808354040283529160200191611616565b820191906000526020600020905b8154815290600101906020018083116115f957829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b505050506003830154600484015492985067ffffffffffffffff8082169850680100000000000000008204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600061171386611850565b905060025b815460ff16600281111561172857fe5b1461173257600080fd5b805433600160a060020a03908116610100909204161461175157600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051611784929160200190611b2a565b506002810183805161179a929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff83161061181e57600080fd5b6000805467ffffffffffffffff841690811061183657fe5b906000526020600020906004020160005b5090505b919050565b60015460009067ffffffffffffffff83161061186b57600080fd5b6001805467ffffffffffffffff841690811061188357fe5b906000526020600020906005020160005b5090505b919050565b60008060025b835160028111156118b057fe5b146118b757fe5b8260a0015167ffffffffffffffff1615156118d55760019150610a95565b6118e28360a00151611850565b9050610a92816101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b91505b50919050565b60206040519081016040526000815290565b815481835581811511611b2457600502816005028360005260206000209182019101611b249190611c28565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b610aa391905b80821115611ba557805474ffffffffffffffffffffffffffffffffffffffffff191681556000611c616001830182611cdb565b611c6f600283016000611cdb565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611c2e565b5090565b90565b610aa391905b80821115611ba55760008155600101611cc0565b5090565b90565b50805460018160011615610100020316600290046000825580601f10611d015750611d1f565b601f016020900490600052602060002090810190611d1f9190611cba565b5b505600a165627a7a723058205e4b440a7a8060d5a055c4d8482d6fdb46539ad21e4c5923d38afe99fa37fd2f0029" -exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"type":"function"},{"payable":true,"type":"fallback"}] +exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001cb0833981016040528080519150600190506200003681806200006d565b50600162000046600082620000a1565b5060028054600160a060020a031916600160a060020a039290921691909117905562000239565b8154818355818115116200009c576005028160050283600052602060002091820191016200009c9190620000d0565b505050565b8154818355818115116200009c576004028160040283600052602060002091820191016200009c919062000144565b6200014191905b808211156200013d578054600160a860020a03191681556000620000ff6001830182620001af565b6200010f600283016000620001af565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000d7565b5090565b90565b6200014191905b808211156200013d57600080825560018201805467ffffffffffffffff191690556200017b6002830182620001fa565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014b565b50805460018160011615610100020316600290046000825580601f10620001d75750620001f7565b601f016020900490600052602060002090810190620001f791906200021c565b50565b508054600082556003016004900490600052602060002090810190620001f791905b6200014191905b808211156200013d576000815560010162000223565b611a6780620002496000396000f3006060604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c95780632101a6ad146101845780632a8ec8cc146101b85780633f657a46146101dd57806352dc7dcc1461025d5780635503d9ba1461032757806372116e921461033a5780637f61fa93146103f7578063cc19ecf7146104a4578063db7c231414610563578063eba8ba0614610620578063f6b24b1c14610778578063fbfa77cf14610835575b600080fd5b34156100d457600080fd5b6100ec67ffffffffffffffff60043516602435610864565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b8381101561014757808201518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018f57600080fd5b6101a467ffffffffffffffff6004351661098a565b604051901515815260200160405180910390f35b34156101c357600080fd5b6101cb610a46565b60405190815260200160405180910390f35b34156101e857600080fd5b6101fd67ffffffffffffffff60043516610a51565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024357fe5b60ff16815260200197505050505050505060405180910390f35b341561026857600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610ad1915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033257600080fd5b6101cb610cc4565b341561034557600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610cce9050565b341561040257600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250611105915050565b34156104af57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506112f7915050565b005b341561056e57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506113e3915050565b341561062b57600080fd5b61064067ffffffffffffffff600435166114cf565b6040518089600281111561065057fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156106d25780820151838201526020016106ba565b50505050905090810190601f1680156106ff5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561073557808201518382015260200161071d565b50505050905090810190601f1680156107625780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b341561078357600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061169a915050565b341561084057600080fd5b610848611786565b604051600160a060020a03909116815260200160405180910390f35b60008061086f61188e565b60008061087b87611795565b9150816002016001870381548110151561089157fe5b90600052602060002090600491828204019190066008029054906101000a900467ffffffffffffffff1694506108c6856117db565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050925050509250925092565b600080610996836117db565b90506000815460ff1660028111156109aa57fe5b14156109b95760009150610a40565b6002815460ff1660028111156109cb57fe5b146109d257fe5b6003810154608060020a900460ff16156109ef5760019150610a40565b600381015468010000000000000000900467ffffffffffffffff161515610a195760009150610a40565b6003810154610a3d9068010000000000000000900467ffffffffffffffff1661098a565b91505b50919050565b600054600019015b90565b600080600080600080600080610a6689611795565b805460018201546002830154600390930154919c67ffffffffffffffff9182169c50929a50808216995068010000000000000000820481169850608060020a82041696507801000000000000000000000000000000000000000000000000900460ff16945092505050565b600180549081808201610ae483826118a0565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610b6457fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610baa9291602001906118d1565b50606082015181600201908051610bc59291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b60008067ffffffffffffffff851615610f0d57610cea856117db565b90506002815460ff166002811115610cfe57fe5b14610d0857600080fd5b6014610f03826101006040519081016040528154909190829060ff166002811115610d2f57fe5b6002811115610d3a57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e065780601f10610ddb57610100808354040283529160200191610e06565b820191906000526020600020905b815481529060010190602001808311610de957829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152611823565b10610f0d57600080fd5b60018054925082808201610f2183826118a0565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115610fa257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610fe89291602001906118d1565b506060820151816002019080516110039291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b60018054908180820161111883826118a0565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561119857fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516111de9291602001906118d1565b506060820151816002019080516111f99291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b6000611302866117db565b90506001815460ff16600281111561131657fe5b1461132057600080fd5b805433600160a060020a03908116610100909204161461133f57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113729291602001906118d1565b50600281018380516113889291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b60006113ee866117db565b90506000815460ff16600281111561140257fe5b1461140c57600080fd5b805433600160a060020a03908116610100909204161461142b57600080fd5b805461010060a860020a031916610100600160a060020a038716021781556001810184805161145e9291602001906118d1565b50600281018380516114749291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b6000806114da61188e565b6114e261188e565b60008060008060006114f38a6117db565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a95780601f1061157e576101008083540402835291602001916115a9565b820191906000526020600020905b81548152906001019060200180831161158c57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b5050505060038301546004909301549a9c999b509799909867ffffffffffffffff8084169950680100000000000000008404169750608060020a90920460ff169550600160a060020a03169350915050565b60006116a5866117db565b90506002815460ff1660028111156116b957fe5b146116c357600080fd5b805433600160a060020a0390811661010090920416146116e257600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516117159291602001906118d1565b506002810183805161172b9291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff8316106117ae57600080fd5b6000805467ffffffffffffffff84169081106117c657fe5b90600052602060002090600402019050919050565b60015460009067ffffffffffffffff8316106117f657600080fd5b6001805467ffffffffffffffff841690811061180e57fe5b90600052602060002090600502019050919050565b60008060028351600281111561183557fe5b1461183c57fe5b8260a0015167ffffffffffffffff16151561185a5760019150610a40565b6118678360a001516117db565b9050610a3d816101006040519081016040528154909190829060ff166002811115610d2f57fe5b60206040519081016040526000815290565b8154818355818115116118cc576005028160050283600052602060002091820191016118cc919061194f565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061191257805160ff191683800117855561193f565b8280016001018555821561193f579182015b8281111561193f578251825591602001919060010190611924565b5061194b9291506119da565b5090565b610a4e91905b8082111561194b57805474ffffffffffffffffffffffffffffffffffffffffff19168155600061198860018301826119f4565b6119966002830160006119f4565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611955565b610a4e91905b8082111561194b57600081556001016119e0565b50805460018160011615610100020316600290046000825580601f10611a1a5750611a38565b601f016020900490600052602060002090810190611a3891906119da565b505600a165627a7a723058201215bea8f006cb5c585a0631fcee8b723cd2817899dce7f4f50fcdf5cc157e480029" +exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}] exports.VaultByteCode = "0x" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" exports._sha256 = "0x4015d9fdc97a031838e6efed18f8963efc7f634dfd0f0c3a0077ef4dec1ada6b" diff --git a/build/LiquidPledgingMock.sol.js b/build/LiquidPledgingMock.sol.js index b2647ac..b5afa1e 100644 --- a/build/LiquidPledgingMock.sol.js +++ b/build/LiquidPledgingMock.sol.js @@ -1,14 +1,14 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"type":"function"}] +exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] exports.ILiquidPledgingPluginByteCode = "0x" -exports.LiquidPledgingAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingByteCode = "0x606060405234156200001057600080fd5b60405160208062004f6b833981016040528080519150505b805b60016200003881806200006e565b50600162000048600082620000a3565b5060028054600160a060020a031916600160a060020a0383161790555b505b5062000259565b8154818355818115116200009d576005028160050283600052602060002091820191016200009d9190620000d8565b5b505050565b8154818355818115116200009d576004028160040283600052602060002091820191016200009d91906200014c565b5b505050565b6200014991905b8082111562000145578054600160a860020a03191681556000620001076001830182620001be565b62000117600283016000620001be565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000df565b5090565b90565b6200014991905b808211156200014557600080825560018201805467ffffffffffffffff191690556200018360028301826200020a565b506003810180547fffffffffffffff0000000000000000000000000000000000000000000000000016905560040162000153565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001e6575062000206565b601f01602090049060005260206000209081019062000206919062000235565b5b50565b50805460008255600301600490049060005260206000209081019062000206919062000235565b5b50565b6200014991905b808211156200014557600081556001016200023c565b5090565b90565b614d0280620002696000396000f300606060405236156101385763ffffffff60e060020a60003504166314e7b1dc811461013d5780632101a6ad146101f75780632a8ec8cc1461022a5780632ee888081461024f5780633f657a461461027357806343387983146102f157806347c5ef431461031557806350f8a8031461034657806352dc7dcc146103815780635503d9ba1461044957806357adafb61461046e57806372116e92146104bf578063796d5654146105975780637f61fa93146105b85780639398f5a214610680578063af9f4563146106d1578063bce0906d146106f5578063bde60ac914610760578063cc19ecf71461077c578063d639cd7314610839578063db7c2314146108a3578063e9c211e214610960578063eba8ba0614610984578063ef3766e414610adc578063f6b24b1c14610b2d578063fbfa77cf14610bea575b600080fd5b341561014857600080fd5b61015f6001604060020a0360043516602435610c19565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101ba5780820151818401525b6020016101a1565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561020257600080fd5b6102166001604060020a0360043516610d40565b604051901515815260200160405180910390f35b341561023557600080fd5b61023d610df2565b60405190815260200160405180910390f35b341561025a57600080fd5b6102716001604060020a0360043516602435610dfd565b005b341561027e57600080fd5b6102926001604060020a0360043516610f43565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102d757fe5b60ff16815260200197505050505050505060405180910390f35b34156102fc57600080fd5b6102716001604060020a0360043516602435610fb0565b005b341561032057600080fd5b6102716001604060020a036004358116906024358116906044359060643516611355565b005b341561035157600080fd5b6103656001604060020a0360043516611a12565b6040516001604060020a03909116815260200160405180910390f35b341561038c57600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611bde915050565b6040516001604060020a03909116815260200160405180910390f35b341561045457600080fd5b61023d611dcf565b60405190815260200160405180910390f35b341561047957600080fd5b6102716004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611dda95505050505050565b005b34156104ca57600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611e4d9050565b6040516001604060020a03909116815260200160405180910390f35b34156105a257600080fd5b6102716001604060020a036004351661227d565b005b34156105c357600080fd5b61036560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a031692506124da915050565b6040516001604060020a03909116815260200160405180910390f35b341561068b57600080fd5b61027160046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506126ca95505050505050565b005b34156106dc57600080fd5b6102716001604060020a036004351660243561273d565b005b341561070057600080fd5b610365600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061298b95505050505050565b6040516001604060020a03909116815260200160405180910390f35b6102716001604060020a03600435811690602435166129d8565b005b341561078757600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612d13915050565b005b341561084457600080fd5b610271600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a03169250612e00915050565b005b34156108ae57600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612e77915050565b005b341561096b57600080fd5b6102716001604060020a0360043516602435612f64565b005b341561098f57600080fd5b6109a36001604060020a036004351661308e565b604051808960028111156109b357fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b83811015610a355780820151818401525b602001610a1c565b50505050905090810190601f168015610a625780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610a995780820151818401525b602001610a80565b50505050905090810190601f168015610ac65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610ae757600080fd5b610271600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061325495505050505050565b005b3415610b3857600080fd5b610271600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a031692506132c7915050565b005b3415610bf557600080fd5b610bfd6133b4565b604051600160a060020a03909116815260200160405180910390f35b600080610c246148e1565b600080610c30876133c3565b91508160020160018703815481101515610c4657fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a03169450610c7b8561340c565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b505050505092505b50509250925092565b600080610d4c8361340c565b905060005b815460ff166002811115610d6157fe5b1415610d705760009150610dec565b60025b815460ff166002811115610d8357fe5b14610d8a57fe5b6003810154608060020a900460ff1615610da75760019150610dec565b6003810154604060020a90046001604060020a03161515610dcb5760009150610dec565b6003810154610de990604060020a90046001604060020a0316610d40565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610e1d57600080fd5b610e26846133c3565b915060015b600383015460c060020a900460ff166002811115610e4557fe5b14610e4f57600080fd5b836001604060020a0316610e6285613457565b6001604060020a031614610e7557600080fd5b6001820154600283018054610f2e926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610f0857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610ec55790505b505050506003860154600091508190608060020a90046001604060020a03166002613521565b9050610f3b848285613813565b5b5b50505050565b600080600080600080600080610f58896133c3565b8054600182015460028301546003840154929b506001604060020a039182169a5098508082169750604060020a820481169650608060020a820416945060c060020a900460ff16925090505b50919395979092949650565b6000806000610fbe85611a12565b9450610fc9856133c3565b925060005b600384015460c060020a900460ff166002811115610fe857fe5b14610ff257600080fd5b6001830154611009906001604060020a031661340c565b91506111fe826101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60018301546002840180546112b7926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561129157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161124e5790505b505050506003870154600091508190608060020a90046001604060020a03166001613521565b90506112c4858286613813565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b151561133957600080fd5b6102c65a03f1151561134a57600080fd5b5050505b5050505050565b600080600080600061136688611a12565b9750611371886133c3565b945061137c8661340c565b93506113878961340c565b925061157c836101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60005b600386015460c060020a900460ff16600281111561159957fe5b146115a357600080fd5b60018501546001604060020a038a8116911614156116545760005b845460ff1660028111156115ce57fe5b14156115e4576115df888888613925565b61164c565b60025b845460ff1660028111156115f757fe5b141561160d576115df88888861396b565b61164c565b60015b845460ff16600281111561162057fe5b141561164a5761163888888760020180549050613bca565b97506115df888888613cd6565b61164c565bfe5b5b5b5b611a06565b6117858560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561171e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116116db5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561177157fe5b600281111561177c57fe5b9052508a613e0a565b6001604060020a039081169250821461164a5760005b845460ff1660028111156117ab57fe5b14156117e25760018501546001604060020a038781169116146117ca57fe5b6117dc88888760020180549050613bca565b50611a06565b60015b845460ff1660028111156117f557fe5b14156119c15761192c8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156118c557602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118825790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561191857fe5b600281111561192357fe5b90525087613e0a565b6001604060020a03908116915081141561196957611638888860018589600201805490500303613bca565b97506115df888888613cd6565b61164c565b8181111561199a57611638888860018589600201805490500303613bca565b97506115df888888613cd6565b61164c565b81811161164c576117dc888860018489600201805490500303613bca565b505b5b5b611a06565b60025b845460ff1660028111156119d457fe5b141561164a576119f1888860018589600201805490500303613bca565b975061164c888888613e71565b611a06565b5bfe5b5b505050505050505050565b600080600080611a21856133c3565b925060005b600384015460c060020a900460ff166002811115611a4057fe5b14611a4d57849350611bd6565b600383015460006001604060020a03909116118015611a8657506003830154604060020a90046001604060020a0316611a846141d3565b115b15611ba4576001830154600284018054611b43926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b1e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611adb5790505b505050506003870154600091508190608060020a90046001604060020a031681613521565b6003840154909250611b84906001604060020a03166000604051805910611b675750595b908082528060200260200182016040525b50600080866000613521565b9050611b9585828560000154613813565b809450611ba1856133c3565b92505b611bad85613457565b90506001604060020a0380821690861614611bd157611bd185828560000154613813565b5b8093505b505050919050565b600180549081808201611bf183826148f3565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115611c7257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611cb8929160200190614925565b50606082015181600201908051611cd3929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b600080805b8351831015610f3b576001604060020a03848481518110611dfc57fe5b90602001906020020151169150604060020a848481518110611e1a57fe5b90602001906020020151811515611e2d57fe5b049050611e3a8282610fb0565b5b600190920191611ddf565b5b50505050565b6000806001604060020a0385161561208657611e688561340c565b905060025b815460ff166002811115611e7d57fe5b14611e8757600080fd5b601461207c826101006040519081016040528154909190829060ff166002811115611eae57fe5b6002811115611eb957fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f855780601f10611f5a57610100808354040283529160200191611f85565b820191906000526020600020905b815481529060010190602001808311611f6857829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120275780601f10611ffc57610100808354040283529160200191612027565b820191906000526020600020905b81548152906001019060200180831161200a57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526141d8565b1061208657600080fd5b5b6001805492508280820161209b83826148f3565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561211d57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612163929160200190614925565b5060608201518160020190805161217e929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60006122888261340c565b905061247d816101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25b5050565b6001805490818082016124ed83826148f3565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561256e57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516125b4929160200190614925565b506060820151816002019080516125cf929160200190614925565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600080805b8351831015610f3b576001604060020a038484815181106126ec57fe5b90602001906020020151169150604060020a84848151811061270a57fe5b9060200190602002015181151561271d57fe5b04905061272a8282610dfd565b5b6001909201916126cf565b5b50505050565b60008061274984611a12565b9350612754846133c3565b600181015490925061276e906001604060020a031661340c565b9050612963816101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b6003820154610f3b908590608060020a90046001604060020a031685613813565b5b50505050565b600080805b83518210156129d0576001604060020a038483815181106129ad57fe5b906020019060200201511690506129c381611a12565b505b600190910190612990565b5b5050919050565b60008080806001604060020a0386161515612a1e57612a1b6020604051908101604052806000815250602060405190810160405260008082526203f480906124da565b95505b612a278661340c565b9350612c1c846101006040519081016040528154909190829060ff16600281111561103057fe5b600281111561103b57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111075780601f106110dc57610100808354040283529160200191611107565b820191906000526020600020905b8154815290600101906020018083116110ea57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a95780601f1061117e576101008083540402835291602001916111a9565b820191906000526020600020905b81548152906001019060200180831161118c57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138dd565b60005b845460ff166002811115612c2f57fe5b14612c3957600080fd5b34925060008311612c4957600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515612c7c57600080fd5b612cac866000604051805910612c8f5750595b908082528060200260200182016040525b50600080600080613521565b9150612cb7826133c3565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a3612d0a86838588611355565b5b505050505050565b6000612d1e8661340c565b905060015b815460ff166002811115612d3357fe5b14612d3d57600080fd5b805433600160a060020a039081166101009092041614612d5c57600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612d8f929160200190614925565b5060028101838051612da5929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600080805b8451831015612d0a576001604060020a03858481518110612e2257fe5b90602001906020020151169150604060020a858481518110612e4057fe5b90602001906020020151811515612e5357fe5b049050612e6286838387611355565b5b600190920191612e05565b5b505050505050565b6000612e828661340c565b905060005b815460ff166002811115612e9757fe5b14612ea157600080fd5b805433600160a060020a039081166101009092041614612ec057600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612ef3929160200190614925565b5060028101838051612f09929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600254600090819033600160a060020a03908116911614612f8457600080fd5b612f8d846133c3565b915060015b600383015460c060020a900460ff166002811115612fac57fe5b14612fb657600080fd5b600182015460028301805461306e926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561304957602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116130065790505b505050506003860154600091508190608060020a90046001604060020a031681613521565b9050610f2e81611a12565b9050610f3b848285613813565b5b5b50505050565b6000806130996148e1565b6130a16148e1565b60008060008060006130b28a61340c565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156131685780601f1061313d57610100808354040283529160200191613168565b820191906000526020600020905b81548152906001019060200180831161314b57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132075780601f106131dc57610100808354040283529160200191613207565b820191906000526020600020905b8154815290600101906020018083116131ea57829003601f168201915b50505050600383015460048401549298506001604060020a038082169850604060020a8204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600080805b8351831015610f3b576001604060020a0384848151811061327657fe5b90602001906020020151169150604060020a84848151811061329457fe5b906020019060200201518115156132a757fe5b0490506132b48282612f64565b5b600190920191613259565b5b50505050565b60006132d28661340c565b905060025b815460ff1660028111156132e757fe5b146132f157600080fd5b805433600160a060020a03908116610100909204161461331057600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051613343929160200190614925565b5060028101838051613359929160200190614925565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b600080546001604060020a038316106133db57600080fd5b600080546001604060020a0384169081106133f257fe5b906000526020600020906004020160005b5090505b919050565b6001546000906001604060020a0383161061342657600080fd5b600180546001604060020a03841690811061343d57fe5b906000526020600020906005020160005b5090505b919050565b600080806001604060020a038416151561347457600092506129d0565b61347d846133c3565b6001810154909250613497906001604060020a031661340c565b905060005b815460ff1660028111156134ac57fe5b14156134ba578392506129d0565b60025b815460ff1660028111156134cd57fe5b146134d457fe5b60018201546134eb906001604060020a0316610d40565b15156134f9578392506129d0565b600382015461351790608060020a90046001604060020a0316613457565b92505b5050919050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b8381101561356f5780820151818401525b602001613556565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a0281526008018260028111156135dc57fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a03909116915081111561364557809250613807565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a0383161790558154909190600181016136838382614a23565b916000526020600020906004020160005b60e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a031681526020018860028111156136f557fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a0392909216919091179055604082015181600201908051613740929160200190614a55565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a8360028111156137fb57fe5b02179055505050508092505b50509695505050505050565b6000806000613825600187878761441a565b9250846001604060020a0316866001604060020a0316141561384657612d0a565b82151561385257612d0a565b61385b866133c3565b9150613866856133c3565b82549091508390101561387857600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a36138d3600087878661441a565b505b505050505050565b8060200151600160a060020a031633600160a060020a0316148061391657508060e00151600160a060020a031633600160a060020a0316145b151561392157600080fd5b5b50565b6000610f2e826000604051805910612c8f5750595b908082528060200260200182016040525b50600080600080613521565b9050610f3b848285613813565b5b50505050565b6000806000613979866133c3565b92506014613aad8460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b10613ab757600080fd5b613ac084610d40565b15613aca57600080fd5b6001830154600284018054613b82926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b1e57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611adb5790505b505050506003870154600091508190608060020a90046001604060020a031681613521565b9150613bb4846000604051805910611b675750595b908082528060200260200182016040525b50600080866000613521565b9050612d0a868287613813565b5b505050505050565b600080613bd56148e1565b600080613be1886133c3565b6002810154909450869003604051805910613bf95750595b908082528060200260200182016040525b509250600091505b6002840154869003821015613c8a5760028401805483908110613c3157fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613c6757fe5b6001604060020a039092166020928302909101909101525b600190910190613c12565b60018401546003850154613cba916001604060020a039081169186916000918291608060020a9091041681613521565b9050613cc7888289613813565b8094505b505050509392505050565b6000613ce06148e1565b600080613cec876133c3565b600281015490945060149010613d0157600080fd5b6002840154600101604051805910613d165750595b908082528060200260200182016040525b509250600091505b6002840154821015613da45760028401805483908110613d4b57fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613d8157fe5b6001604060020a039092166020928302909101909101525b600190910190613d2f565b60028401548590849081518110613db757fe5b6001604060020a039283166020918202909201015260018501546003860154613df3929182169186916000918291608060020a90041681613521565b90506138d3878288613813565b5b50505050505050565b6000805b836040015151811015613e5f57826001604060020a031684604001518281518110613e3557fe5b906020019060200201516001604060020a03161415613e5657809150613e6a565b5b600101613e0e565b6001604060020a0391505b5092915050565b600080613e7d856133c3565b91506014613fb18360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b10613fbb57600080fd5b613fc483610d40565b15613fce57600080fd5b60018201546002830180546141be926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561406157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161401e5790505b5050505050856141978660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561413157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116140ee5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561418457fe5b600281111561418f57fe5b9052506145ad565b61419f6141d3565b6003880154910190608060020a90046001604060020a03166000613521565b905061134e858286613813565b5b5050505050565b425b90565b60008060025b835160028111156141eb57fe5b146141f257fe5b8260a001516001604060020a0316151561420f5760019150610dec565b61421c8360a0015161340c565b9050610de9816101006040519081016040528154909190829060ff166002811115611eae57fe5b6002811115611eb957fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f855780601f10611f5a57610100808354040283529160200191611f85565b820191906000526020600020905b815481529060010190602001808311611f6857829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120275780601f10611ffc57610100808354040283529160200191612027565b820191906000526020600020905b81548152906001019060200180831161200a57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526141d8565b91505b50919050565b806144288585808685614640565b90506144378584868685614640565b90505b949350505050565b6000808260a001516001604060020a031615156144625760009150610dec565b61446f8360a001516133c3565b90506145a18160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613a4757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a045790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613a9a57fe5b6002811115613aa557fe5b905250614442565b60010191505b50919050565b60008060006145bf846020015161340c565b60038101546001604060020a031693509150600090505b8360400151518110156129d057614605846040015182815181106145f657fe5b9060200190602002015161340c565b60038101549092506001604060020a03168390111561462f5760038201546001604060020a031692505b5b6001016145d6565b5b5050919050565b600080600080866001604060020a0316886001604060020a0316146146675761010061466a565b60005b61ffff16925084935061467c886133c3565b600181015490925061469c908a906001604060020a031689898789614761565b9350600090505b60028201546001604060020a03821610156147195761470e8983600201836001604060020a03168154811015156146d657fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316898985880160010189614761565b93505b6001016146a3565b600382015460006001604060020a039091161115614754576003820154614751908a906001604060020a0316898960ff880189614761565b93505b5b50505095945050505050565b8060008061476e8861340c565b6004810154909150600160a060020a03161580159061478d5750600083115b15613807578815614848576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b151561481757600080fd5b6102c65a03f1151561482857600080fd5b50505060405180519250508282111561484057600080fd5b819250613807565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b15156148be57600080fd5b6102c65a03f115156148cf57600080fd5b5050505b5b5b50509695505050505050565b60206040519081016040526000815290565b81548183558181151161491f5760050281600502836000526020600020918201910161491f9190614b1f565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061496657805160ff1916838001178555614993565b82800160010185558215614993579182015b82811115614993578251825591602001919060010190614978565b5b506149a0929150614bb1565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061496657805160ff1916838001178555614993565b82800160010185558215614993579182015b82811115614993578251825591602001919060010190614978565b5b506149a0929150614bb1565b5090565b81548183558181151161491f5760040281600402836000526020600020918201910161491f9190614bd2565b5b505050565b82805482825590600052602060002090600301600490048101928215614afd5791602002820160005b83821115614ac857835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302614a7e565b8015614afb5782816101000a8154906001604060020a030219169055600801602081600701049283019260010302614ac8565b505b506149a0929150614c39565b5090565b60206040519081016040526000815290565b610dfa91905b808211156149a057805474ffffffffffffffffffffffffffffffffffffffffff191681556000614b586001830182614c65565b614b66600283016000614c65565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501614b25565b5090565b90565b610dfa91905b808211156149a05760008155600101614bb7565b5090565b90565b610dfa91905b808211156149a057600080825560018201805467ffffffffffffffff19169055614c056002830182614cad565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401614bd8565b5090565b90565b610dfa91905b808211156149a057805467ffffffffffffffff19168155600101614c3f565b5090565b90565b50805460018160011615610100020316600290046000825580601f10614c8b5750613921565b601f0160209004906000526020600020908101906139219190614bb1565b5b50565b5080546000825560030160049004906000526020600020908101906139219190614bb1565b5b505600a165627a7a72305820c792feb9df1401717c161c2d2812185beb9de7d5b88f36a880a3c0498717d19a0029" -exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001fb4833981016040528080519150505b60016200003681806200006a565b506001620000466000826200009f565b5060028054600160a060020a031916600160a060020a0383161790555b5062000255565b8154818355818115116200009957600502816005028360005260206000209182019101620000999190620000d4565b5b505050565b815481835581811511620000995760040281600402836000526020600020918201910162000099919062000148565b5b505050565b6200014591905b8082111562000141578054600160a860020a03191681556000620001036001830182620001ba565b62000113600283016000620001ba565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000db565b5090565b90565b6200014591905b808211156200014157600080825560018201805467ffffffffffffffff191690556200017f600283018262000206565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014f565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001e2575062000202565b601f01602090049060005260206000209081019062000202919062000231565b5b50565b50805460008255600301600490049060005260206000209081019062000202919062000231565b5b50565b6200014591905b8082111562000141576000815560010162000238565b5090565b90565b611d4f80620002656000396000f300606060405236156100c25763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c75780632101a6ad146101835780632a8ec8cc146101b75780633f657a46146101dc57806352dc7dcc1461025c5780635503d9ba1461032657806372116e921461034b5780637f61fa9314610425578063cc19ecf7146104ef578063db7c2314146105ae578063eba8ba061461066d578063f6b24b1c146107c7578063fbfa77cf14610886575b600080fd5b34156100d257600080fd5b6100ea67ffffffffffffffff600435166024356108b5565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101465780820151818401525b60200161012d565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018e57600080fd5b6101a367ffffffffffffffff600435166109dd565b604051901515815260200160405180910390f35b34156101c257600080fd5b6101ca610a9b565b60405190815260200160405180910390f35b34156101e757600080fd5b6101fc67ffffffffffffffff60043516610aa6565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024257fe5b60ff16815260200197505050505050505060405180910390f35b341561026757600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610b2e915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033157600080fd5b6101ca610d24565b60405190815260200160405180910390f35b341561035657600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610d2f9050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561043057600080fd5b61030960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a0316925061116b915050565b60405167ffffffffffffffff909116815260200160405180910390f35b34156104fa57600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611360915050565b005b34156105b957600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061144e915050565b005b341561067857600080fd5b61068d67ffffffffffffffff6004351661153c565b6040518089600281111561069d57fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156107205780820151818401525b602001610707565b50505050905090810190601f16801561074d5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b838110156107845780820151818401525b60200161076b565b50505050905090810190601f1680156107b15780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34156107d257600080fd5b6105ac6004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff169250611708915050565b005b341561089157600080fd5b6108996117f6565b604051600160a060020a03909116815260200160405180910390f35b6000806108c0611ae6565b6000806108cc87611805565b915081600201600187038154811015156108e257fe5b90600052602060002090600491828204019190066008025b9054906101000a900467ffffffffffffffff16945061091885611850565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109cc5780601f106109a1576101008083540402835291602001916109cc565b820191906000526020600020905b8154815290600101906020018083116109af57829003601f168201915b505050505092505b50509250925092565b6000806109e983611850565b905060005b815460ff1660028111156109fe57fe5b1415610a0d5760009150610a95565b60025b815460ff166002811115610a2057fe5b14610a2757fe5b6003810154608060020a900460ff1615610a445760019150610a95565b600381015468010000000000000000900467ffffffffffffffff161515610a6e5760009150610a95565b6003810154610a929068010000000000000000900467ffffffffffffffff166109dd565b91505b50919050565b600054600019015b90565b600080600080600080600080610abb89611805565b8054600182015460028301546003840154929b5067ffffffffffffffff9182169a509850808216975068010000000000000000820481169650608060020a82041694507801000000000000000000000000000000000000000000000000900460ff16925090505b50919395979092949650565b600180549081808201610b418382611af8565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610bc357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610c09929160200190611b2a565b50606082015181600201908051610c24929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b60008067ffffffffffffffff851615610f6f57610d4b85611850565b905060025b815460ff166002811115610d6057fe5b14610d6a57600080fd5b6014610f65826101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b10610f6f57600080fd5b5b60018054925082808201610f848382611af8565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561100757fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a031990911617815560408201518160010190805161104d929160200190611b2a565b50606082015181600201908051611068929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60018054908180820161117e8382611af8565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561120057fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611246929160200190611b2a565b50606082015181600201908051611261929160200190611b2a565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600061136b86611850565b905060015b815460ff16600281111561138057fe5b1461138a57600080fd5b805433600160a060020a0390811661010090920416146113a957600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113dc929160200190611b2a565b50600281018380516113f2929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600061145986611850565b905060005b815460ff16600281111561146e57fe5b1461147857600080fd5b805433600160a060020a03908116610100909204161461149757600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516114ca929160200190611b2a565b50600281018380516114e0929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600080611547611ae6565b61154f611ae6565b60008060008060006115608a611850565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156116165780601f106115eb57610100808354040283529160200191611616565b820191906000526020600020905b8154815290600101906020018083116115f957829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b505050506003830154600484015492985067ffffffffffffffff8082169850680100000000000000008204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600061171386611850565b905060025b815460ff16600281111561172857fe5b1461173257600080fd5b805433600160a060020a03908116610100909204161461175157600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051611784929160200190611b2a565b506002810183805161179a929160200190611b2a565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff83161061181e57600080fd5b6000805467ffffffffffffffff841690811061183657fe5b906000526020600020906004020160005b5090505b919050565b60015460009067ffffffffffffffff83161061186b57600080fd5b6001805467ffffffffffffffff841690811061188357fe5b906000526020600020906005020160005b5090505b919050565b60008060025b835160028111156118b057fe5b146118b757fe5b8260a0015167ffffffffffffffff1615156118d55760019150610a95565b6118e28360a00151611850565b9050610a92816101006040519081016040528154909190829060ff166002811115610d9157fe5b6002811115610d9c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f0a5780601f10610edf57610100808354040283529160200191610f0a565b820191906000526020600020905b815481529060010190602001808311610eed57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261189d565b91505b50919050565b60206040519081016040526000815290565b815481835581811511611b2457600502816005028360005260206000209182019101611b249190611c28565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b6b57805160ff1916838001178555611b98565b82800160010185558215611b98579182015b82811115611b98578251825591602001919060010190611b7d565b5b50611ba5929150611cba565b5090565b610aa391905b80821115611ba557805474ffffffffffffffffffffffffffffffffffffffffff191681556000611c616001830182611cdb565b611c6f600283016000611cdb565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611c2e565b5090565b90565b610aa391905b80821115611ba55760008155600101611cc0565b5090565b90565b50805460018160011615610100020316600290046000825580601f10611d015750611d1f565b601f016020900490600052602060002090810190611d1f9190611cba565b5b505600a165627a7a723058203f7b0aa3dc7065aea974169f7b77637d8fa151e561b988e273970aab45e201300029" -exports.LiquidPledgingMockAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"mock_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_t","type":"uint256"}],"name":"setMockedTime","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] -exports.LiquidPledgingMockByteCode = "0x606060405234156200001057600080fd5b60405160208062004fd7833981016040528080519150505b805b805b60016200003a818062000076565b5060016200004a600082620000ab565b5060028054600160a060020a031916600160a060020a0383161790555b505b50426004555b5062000261565b815481835581811511620000a557600502816005028360005260206000209182019101620000a59190620000e0565b5b505050565b815481835581811511620000a557600402816004028360005260206000209182019101620000a5919062000154565b5b505050565b6200015191905b808211156200014d578054600160a860020a031916815560006200010f6001830182620001c6565b6200011f600283016000620001c6565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000e7565b5090565b90565b6200015191905b808211156200014d57600080825560018201805467ffffffffffffffff191690556200018b600283018262000212565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200015b565b5090565b90565b50805460018160011615610100020316600290046000825580601f10620001ee57506200020e565b601f0160209004906000526020600020908101906200020e91906200023d565b5b50565b5080546000825560030160049004906000526020600020908101906200020e91906200023d565b5b50565b6200015191905b808211156200014d576000815560010162000244565b5090565b90565b614d6680620002716000396000f3006060604052361561014e5763ffffffff60e060020a60003504166314e7b1dc81146101535780632101a6ad1461020d5780632a8ec8cc146102405780632ee88808146102655780633f657a4614610289578063433879831461030757806347c5ef431461032b57806350f8a8031461035c57806352dc7dcc146103975780635503d9ba1461045f57806357adafb61461048457806372116e92146104d5578063796d5654146105ad5780637f61fa93146105ce5780639398f5a2146106965780639da47a6b146106e7578063ab8be2311461070c578063af9f456314610724578063bce0906d14610748578063bde60ac9146107b3578063cc19ecf7146107cf578063d639cd731461088c578063db7c2314146108f6578063e9c211e2146109b3578063eba8ba06146109d7578063ef3766e414610b2f578063f6b24b1c14610b80578063fbfa77cf14610c3d575b600080fd5b341561015e57600080fd5b6101756001604060020a0360043516602435610c6c565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101d05780820151818401525b6020016101b7565b50505050905090810190601f1680156101fd5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561021857600080fd5b61022c6001604060020a0360043516610d93565b604051901515815260200160405180910390f35b341561024b57600080fd5b610253610e45565b60405190815260200160405180910390f35b341561027057600080fd5b6102876001604060020a0360043516602435610e50565b005b341561029457600080fd5b6102a86001604060020a0360043516610f96565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102ed57fe5b60ff16815260200197505050505050505060405180910390f35b341561031257600080fd5b6102876001604060020a0360043516602435611003565b005b341561033657600080fd5b6102876001604060020a0360043581169060243581169060443590606435166113a8565b005b341561036757600080fd5b61037b6001604060020a0360043516611a65565b6040516001604060020a03909116815260200160405180910390f35b34156103a257600080fd5b61037b60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611c31915050565b6040516001604060020a03909116815260200160405180910390f35b341561046a57600080fd5b610253611e22565b60405190815260200160405180910390f35b341561048f57600080fd5b6102876004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611e2d95505050505050565b005b34156104e057600080fd5b61037b60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611ea09050565b6040516001604060020a03909116815260200160405180910390f35b34156105b857600080fd5b6102876001604060020a03600435166122d0565b005b34156105d957600080fd5b61037b60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a0316925061252d915050565b6040516001604060020a03909116815260200160405180910390f35b34156106a157600080fd5b610287600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061271d95505050505050565b005b34156106f257600080fd5b610253612790565b60405190815260200160405180910390f35b341561071757600080fd5b610287600435612796565b005b341561072f57600080fd5b6102876001604060020a036004351660243561279f565b005b341561075357600080fd5b61037b60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506129ed95505050505050565b6040516001604060020a03909116815260200160405180910390f35b6102876001604060020a0360043581169060243516612a3a565b005b34156107da57600080fd5b610287600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612d75915050565b005b341561089757600080fd5b610287600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a03169250612e62915050565b005b341561090157600080fd5b610287600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612ed9915050565b005b34156109be57600080fd5b6102876001604060020a0360043516602435612fc6565b005b34156109e257600080fd5b6109f66001604060020a03600435166130f0565b60405180896002811115610a0657fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b83811015610a885780820151818401525b602001610a6f565b50505050905090810190601f168015610ab55780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610aec5780820151818401525b602001610ad3565b50505050905090810190601f168015610b195780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610b3a57600080fd5b61028760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506132b695505050505050565b005b3415610b8b57600080fd5b610287600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250613329915050565b005b3415610c4857600080fd5b610c50613416565b604051600160a060020a03909116815260200160405180910390f35b600080610c77614945565b600080610c8387613425565b91508160020160018703815481101515610c9957fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a03169450610cce8561346e565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d825780601f10610d5757610100808354040283529160200191610d82565b820191906000526020600020905b815481529060010190602001808311610d6557829003601f168201915b505050505092505b50509250925092565b600080610d9f8361346e565b905060005b815460ff166002811115610db457fe5b1415610dc35760009150610e3f565b60025b815460ff166002811115610dd657fe5b14610ddd57fe5b6003810154608060020a900460ff1615610dfa5760019150610e3f565b6003810154604060020a90046001604060020a03161515610e1e5760009150610e3f565b6003810154610e3c90604060020a90046001604060020a0316610d93565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610e7057600080fd5b610e7984613425565b915060015b600383015460c060020a900460ff166002811115610e9857fe5b14610ea257600080fd5b836001604060020a0316610eb5856134b9565b6001604060020a031614610ec857600080fd5b6001820154600283018054610f81926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610f5b57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610f185790505b505050506003860154600091508190608060020a90046001604060020a03166002613583565b9050610f8e848285613875565b5b5b50505050565b600080600080600080600080610fab89613425565b8054600182015460028301546003840154929b506001604060020a039182169a5098508082169750604060020a820481169650608060020a820416945060c060020a900460ff16925090505b50919395979092949650565b600080600061101185611a65565b945061101c85613425565b925060005b600384015460c060020a900460ff16600281111561103b57fe5b1461104557600080fd5b600183015461105c906001604060020a031661346e565b9150611251826101006040519081016040528154909190829060ff16600281111561108357fe5b600281111561108e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111fc5780601f106111d1576101008083540402835291602001916111fc565b820191906000526020600020905b8154815290600101906020018083116111df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261393f565b600183015460028401805461130a926001604060020a031691906020808202016040519081016040528092919081815260200182805480156112e457602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116112a15790505b505050506003870154600091508190608060020a90046001604060020a03166001613583565b9050611317858286613875565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b151561138c57600080fd5b6102c65a03f1151561139d57600080fd5b5050505b5050505050565b60008060008060006113b988611a65565b97506113c488613425565b94506113cf8661346e565b93506113da8961346e565b92506115cf836101006040519081016040528154909190829060ff16600281111561108357fe5b600281111561108e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111fc5780601f106111d1576101008083540402835291602001916111fc565b820191906000526020600020905b8154815290600101906020018083116111df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261393f565b60005b600386015460c060020a900460ff1660028111156115ec57fe5b146115f657600080fd5b60018501546001604060020a038a8116911614156116a75760005b845460ff16600281111561162157fe5b141561163757611632888888613987565b61169f565b60025b845460ff16600281111561164a57fe5b1415611660576116328888886139cd565b61169f565b60015b845460ff16600281111561167357fe5b141561169d5761168b88888760020180549050613c2c565b9750611632888888613d38565b61169f565bfe5b5b5b5b611a59565b6117d88560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561177157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161172e5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156117c457fe5b60028111156117cf57fe5b9052508a613e6c565b6001604060020a039081169250821461169d5760005b845460ff1660028111156117fe57fe5b14156118355760018501546001604060020a0387811691161461181d57fe5b61182f88888760020180549050613c2c565b50611a59565b60015b845460ff16600281111561184857fe5b1415611a145761197f8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561191857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118d55790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561196b57fe5b600281111561197657fe5b90525087613e6c565b6001604060020a0390811691508114156119bc5761168b888860018589600201805490500303613c2c565b9750611632888888613d38565b61169f565b818111156119ed5761168b888860018589600201805490500303613c2c565b9750611632888888613d38565b61169f565b81811161169f5761182f888860018489600201805490500303613c2c565b505b5b5b611a59565b60025b845460ff166002811115611a2757fe5b141561169d57611a44888860018589600201805490500303613c2c565b975061169f888888613ed3565b611a59565b5bfe5b5b505050505050505050565b600080600080611a7485613425565b925060005b600384015460c060020a900460ff166002811115611a9357fe5b14611aa057849350611c29565b600383015460006001604060020a03909116118015611ad957506003830154604060020a90046001604060020a0316611ad7614235565b115b15611bf7576001830154600284018054611b96926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b7157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611b2e5790505b505050506003870154600091508190608060020a90046001604060020a031681613583565b6003840154909250611bd7906001604060020a03166000604051805910611bba5750595b908082528060200260200182016040525b50600080866000613583565b9050611be885828560000154613875565b809450611bf485613425565b92505b611c00856134b9565b90506001604060020a0380821690861614611c2457611c2485828560000154613875565b5b8093505b505050919050565b600180549081808201611c448382614957565b916000526020600020906005020160005b6101006040519081016040528060015b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115611cc557fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611d0b929160200190614989565b50606082015181600201908051611d26929160200190614989565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a25b949350505050565b600154600019015b90565b600080805b8351831015610f8e576001604060020a03848481518110611e4f57fe5b90602001906020020151169150604060020a848481518110611e6d57fe5b90602001906020020151811515611e8057fe5b049050611e8d8282611003565b5b600190920191611e32565b5b50505050565b6000806001604060020a038516156120d957611ebb8561346e565b905060025b815460ff166002811115611ed057fe5b14611eda57600080fd5b60146120cf826101006040519081016040528154909190829060ff166002811115611f0157fe5b6002811115611f0c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561207a5780601f1061204f5761010080835404028352916020019161207a565b820191906000526020600020905b81548152906001019060200180831161205d57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261423c565b106120d957600080fd5b5b600180549250828082016120ee8382614957565b916000526020600020906005020160005b6101006040519081016040528060025b8152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff1916600183600281111561217057fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516121b6929160200190614989565b506060820151816002019080516121d1929160200190614989565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a25b509695505050505050565b60006122db8261346e565b90506124d0816101006040519081016040528154909190829060ff16600281111561108357fe5b600281111561108e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111fc5780601f106111d1576101008083540402835291602001916111fc565b820191906000526020600020905b8154815290600101906020018083116111df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261393f565b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25b5050565b6001805490818082016125408382614957565b916000526020600020906005020160005b6101006040519081016040528060005b8152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156125c157fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612607929160200190614989565b50606082015181600201908051612622929160200190614989565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a25b949350505050565b600080805b8351831015610f8e576001604060020a0384848151811061273f57fe5b90602001906020020151169150604060020a84848151811061275d57fe5b9060200190602002015181151561277057fe5b04905061277d8282610e50565b5b600190920191612722565b5b50505050565b60045481565b60048190555b50565b6000806127ab84611a65565b93506127b684613425565b60018101549092506127d0906001604060020a031661346e565b90506129c5816101006040519081016040528154909190829060ff16600281111561108357fe5b600281111561108e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111fc5780601f106111d1576101008083540402835291602001916111fc565b820191906000526020600020905b8154815290600101906020018083116111df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261393f565b6003820154610f8e908590608060020a90046001604060020a031685613875565b5b50505050565b600080805b8351821015612a32576001604060020a03848381518110612a0f57fe5b90602001906020020151169050612a2581611a65565b505b6001909101906129f2565b5b5050919050565b60008080806001604060020a0386161515612a8057612a7d6020604051908101604052806000815250602060405190810160405260008082526203f4809061252d565b95505b612a898661346e565b9350612c7e846101006040519081016040528154909190829060ff16600281111561108357fe5b600281111561108e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111fc5780601f106111d1576101008083540402835291602001916111fc565b820191906000526020600020905b8154815290600101906020018083116111df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261393f565b60005b845460ff166002811115612c9157fe5b14612c9b57600080fd5b34925060008311612cab57600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515612cde57600080fd5b612d0e866000604051805910612cf15750595b908082528060200260200182016040525b50600080600080613583565b9150612d1982613425565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a3612d6c868385886113a8565b5b505050505050565b6000612d808661346e565b905060015b815460ff166002811115612d9557fe5b14612d9f57600080fd5b805433600160a060020a039081166101009092041614612dbe57600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612df1929160200190614989565b5060028101838051612e07929160200190614989565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a25b505050505050565b600080805b8451831015612d6c576001604060020a03858481518110612e8457fe5b90602001906020020151169150604060020a858481518110612ea257fe5b90602001906020020151811515612eb557fe5b049050612ec4868383876113a8565b5b600190920191612e67565b5b505050505050565b6000612ee48661346e565b905060005b815460ff166002811115612ef957fe5b14612f0357600080fd5b805433600160a060020a039081166101009092041614612f2257600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612f55929160200190614989565b5060028101838051612f6b929160200190614989565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a25b505050505050565b600254600090819033600160a060020a03908116911614612fe657600080fd5b612fef84613425565b915060015b600383015460c060020a900460ff16600281111561300e57fe5b1461301857600080fd5b60018201546002830180546130d0926001604060020a031691906020808202016040519081016040528092919081815260200182805480156130ab57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116130685790505b505050506003860154600091508190608060020a90046001604060020a031681613583565b9050610f8181611a65565b9050610f8e848285613875565b5b5b50505050565b6000806130fb614945565b613103614945565b60008060008060006131148a61346e565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156131ca5780601f1061319f576101008083540402835291602001916131ca565b820191906000526020600020905b8154815290600101906020018083116131ad57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132695780601f1061323e57610100808354040283529160200191613269565b820191906000526020600020905b81548152906001019060200180831161324c57829003601f168201915b50505050600383015460048401549298506001604060020a038082169850604060020a8204169650608060020a900460ff16945050600160a060020a031691505b50919395975091939597565b600080805b8351831015610f8e576001604060020a038484815181106132d857fe5b90602001906020020151169150604060020a8484815181106132f657fe5b9060200190602002015181151561330957fe5b0490506133168282612fc6565b5b6001909201916132bb565b5b50505050565b60006133348661346e565b905060025b815460ff16600281111561334957fe5b1461335357600080fd5b805433600160a060020a03908116610100909204161461337257600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516133a5929160200190614989565b50600281018380516133bb929160200190614989565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a25b505050505050565b600254600160a060020a031681565b600080546001604060020a0383161061343d57600080fd5b600080546001604060020a03841690811061345457fe5b906000526020600020906004020160005b5090505b919050565b6001546000906001604060020a0383161061348857600080fd5b600180546001604060020a03841690811061349f57fe5b906000526020600020906005020160005b5090505b919050565b600080806001604060020a03841615156134d65760009250612a32565b6134df84613425565b60018101549092506134f9906001604060020a031661346e565b905060005b815460ff16600281111561350e57fe5b141561351c57839250612a32565b60025b815460ff16600281111561352f57fe5b1461353657fe5b600182015461354d906001604060020a0316610d93565b151561355b57839250612a32565b600382015461357990608060020a90046001604060020a03166134b9565b92505b5050919050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b838110156135d15780820151818401525b6020016135b8565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a02815260080182600281111561363e57fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a0390911691508111156136a757809250613869565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a0383161790558154909190600181016136e58382614a87565b916000526020600020906004020160005b60e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a0316815260200188600281111561375757fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a03929092169190911790556040820151816002019080516137a2929160200190614ab9565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a83600281111561385d57fe5b02179055505050508092505b50509695505050505050565b6000806000613887600187878761447e565b9250846001604060020a0316866001604060020a031614156138a857612d6c565b8215156138b457612d6c565b6138bd86613425565b91506138c885613425565b8254909150839010156138da57600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a3613935600087878661447e565b505b505050505050565b8060200151600160a060020a031633600160a060020a0316148061397857508060e00151600160a060020a031633600160a060020a0316145b151561279c57600080fd5b5b50565b6000610f81826000604051805910612cf15750595b908082528060200260200182016040525b50600080600080613583565b9050610f8e848285613875565b5b50505050565b60008060006139db86613425565b92506014613b0f8460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613aa957602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a665790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613afc57fe5b6002811115613b0757fe5b9052506144a6565b10613b1957600080fd5b613b2284610d93565b15613b2c57600080fd5b6001830154600284018054613be4926001604060020a03169190602080820201604051908101604052809291908181526020018280548015611b7157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411611b2e5790505b505050506003870154600091508190608060020a90046001604060020a031681613583565b9150613c16846000604051805910611bba5750595b908082528060200260200182016040525b50600080866000613583565b9050612d6c868287613875565b5b505050505050565b600080613c37614945565b600080613c4388613425565b6002810154909450869003604051805910613c5b5750595b908082528060200260200182016040525b509250600091505b6002840154869003821015613cec5760028401805483908110613c9357fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613cc957fe5b6001604060020a039092166020928302909101909101525b600190910190613c74565b60018401546003850154613d1c916001604060020a039081169186916000918291608060020a9091041681613583565b9050613d29888289613875565b8094505b505050509392505050565b6000613d42614945565b600080613d4e87613425565b600281015490945060149010613d6357600080fd5b6002840154600101604051805910613d785750595b908082528060200260200182016040525b509250600091505b6002840154821015613e065760028401805483908110613dad57fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a0316838381518110613de357fe5b6001604060020a039092166020928302909101909101525b600190910190613d91565b60028401548590849081518110613e1957fe5b6001604060020a039283166020918202909201015260018501546003860154613e55929182169186916000918291608060020a90041681613583565b9050613935878288613875565b5b50505050505050565b6000805b836040015151811015613ec157826001604060020a031684604001518281518110613e9757fe5b906020019060200201516001604060020a03161415613eb857809150613ecc565b5b600101613e70565b6001604060020a0391505b5092915050565b600080613edf85613425565b915060146140138360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613aa957602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a665790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613afc57fe5b6002811115613b0757fe5b9052506144a6565b1061401d57600080fd5b61402683610d93565b1561403057600080fd5b6001820154600283018054614220926001604060020a031691906020808202016040519081016040528092919081815260200182805480156140c357602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116140805790505b5050505050856141f98660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561419357602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116141505790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156141e657fe5b60028111156141f157fe5b905250614611565b614201614235565b6003880154910190608060020a90046001604060020a03166000613583565b90506113a1858286613875565b5b5050505050565b6004545b90565b60008060025b8351600281111561424f57fe5b1461425657fe5b8260a001516001604060020a031615156142735760019150610e3f565b6142808360a0015161346e565b9050610e3c816101006040519081016040528154909190829060ff166002811115611f0157fe5b6002811115611f0c57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561207a5780601f1061204f5761010080835404028352916020019161207a565b820191906000526020600020905b81548152906001019060200180831161205d57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a031660809091015261423c565b91505b50919050565b8061448c85858086856146a4565b905061449b85848686856146a4565b90505b949350505050565b6000808260a001516001604060020a031615156144c65760009150610e3f565b6144d38360a00151613425565b90506146058160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a0316815260200160028201805480602002602001604051908101604052809291908181526020018280548015613aa957602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411613a665790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff166002811115613afc57fe5b6002811115613b0757fe5b9052506144a6565b60010191505b50919050565b6000806000614623846020015161346e565b60038101546001604060020a031693509150600090505b836040015151811015612a32576146698460400151828151811061465a57fe5b9060200190602002015161346e565b60038101549092506001604060020a0316839011156146935760038201546001604060020a031692505b5b60010161463a565b5b5050919050565b600080600080866001604060020a0316886001604060020a0316146146cb576101006146ce565b60005b61ffff1692508493506146e088613425565b6001810154909250614700908a906001604060020a0316898987896147c5565b9350600090505b60028201546001604060020a038216101561477d576147728983600201836001604060020a031681548110151561473a57fe5b90600052602060002090600491828204019190066008025b9054906101000a90046001604060020a03168989858801600101896147c5565b93505b600101614707565b600382015460006001604060020a0390911611156147b85760038201546147b5908a906001604060020a0316898960ff8801896147c5565b93505b5b50505095945050505050565b806000806147d28861346e565b6004810154909150600160a060020a0316158015906147f15750600083115b156138695788156148ac576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b151561487b57600080fd5b6102c65a03f1151561488c57600080fd5b5050506040518051925050828211156148a457600080fd5b819250613869565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b151561492257600080fd5b6102c65a03f1151561493357600080fd5b5050505b5b5b50509695505050505050565b60206040519081016040526000815290565b815481835581811511614983576005028160050283600052602060002091820191016149839190614b83565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149ca57805160ff19168380011785556149f7565b828001600101855582156149f7579182015b828111156149f75782518255916020019190600101906149dc565b5b50614a04929150614c15565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149ca57805160ff19168380011785556149f7565b828001600101855582156149f7579182015b828111156149f75782518255916020019190600101906149dc565b5b50614a04929150614c15565b5090565b815481835581811511614983576004028160040283600052602060002091820191016149839190614c36565b5b505050565b82805482825590600052602060002090600301600490048101928215614b615791602002820160005b83821115614b2c57835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302614ae2565b8015614b5f5782816101000a8154906001604060020a030219169055600801602081600701049283019260010302614b2c565b505b50614a04929150614c9d565b5090565b60206040519081016040526000815290565b610e4d91905b80821115614a0457805474ffffffffffffffffffffffffffffffffffffffffff191681556000614bbc6001830182614cc9565b614bca600283016000614cc9565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501614b89565b5090565b90565b610e4d91905b80821115614a045760008155600101614c1b565b5090565b90565b610e4d91905b80821115614a0457600080825560018201805467ffffffffffffffff19169055614c696002830182614d11565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401614c3c565b5090565b90565b610e4d91905b80821115614a0457805467ffffffffffffffff19168155600101614ca3565b5090565b90565b50805460018160011615610100020316600290046000825580601f10614cef575061279c565b601f01602090049060005260206000209081019061279c9190614c15565b5b50565b50805460008255600301600490049060005260206000209081019061279c9190614c15565b5b505600a165627a7a72305820b9c0248006724243357afb193eb50e51660adb6264126c7caeef005ec6f58d530029" -exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"type":"function"},{"payable":true,"type":"fallback"}] +exports.LiquidPledgingAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingByteCode = "0x606060405234156200001057600080fd5b6040516020806200434483398101604052808051915081905060016200003781806200006f565b50600162000047600082620000a3565b5060028054600160a060020a031916600160a060020a0392909216919091179055506200023b565b8154818355818115116200009e576005028160050283600052602060002091820191016200009e9190620000d2565b505050565b8154818355818115116200009e576004028160040283600052602060002091820191016200009e919062000146565b6200014391905b808211156200013f578054600160a860020a03191681556000620001016001830182620001b1565b62000111600283016000620001b1565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000d9565b5090565b90565b6200014391905b808211156200013f57600080825560018201805467ffffffffffffffff191690556200017d6002830182620001fc565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014d565b50805460018160011615610100020316600290046000825580601f10620001d95750620001f9565b601f016020900490600052602060002090810190620001f991906200021e565b50565b508054600082556003016004900490600052602060002090810190620001f991905b6200014391905b808211156200013f576000815560010162000225565b6140f9806200024b6000396000f30060606040526004361061013a5763ffffffff60e060020a60003504166314e7b1dc811461013f5780632101a6ad146101f85780632a8ec8cc1461022b5780632ee88808146102505780633f657a461461027457806343387983146102f257806347c5ef431461031457806350f8a8031461034357806352dc7dcc1461037e5780635503d9ba1461042a57806357adafb61461043d57806372116e921461048c578063796d5654146105485780637f61fa93146105675780639398f5a214610613578063af9f456314610662578063bce0906d14610684578063bde60ac9146106d3578063cc19ecf7146106ed578063d639cd73146107a8578063db7c231414610810578063e9c211e2146108cb578063eba8ba06146108ed578063ef3766e414610a43578063f6b24b1c14610a92578063fbfa77cf14610b4d575b600080fd5b341561014a57600080fd5b6101616001604060020a0360043516602435610b7c565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101bb5780820151838201526020016101a3565b50505050905090810190601f1680156101e85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561020357600080fd5b6102176001604060020a0360043516610ca1565b604051901515815260200160405180910390f35b341561023657600080fd5b61023e610d51565b60405190815260200160405180910390f35b341561025b57600080fd5b6102726001604060020a0360043516602435610d5c565b005b341561027f57600080fd5b6102936001604060020a0360043516610e9f565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102d857fe5b60ff16815260200197505050505050505060405180910390f35b34156102fd57600080fd5b6102726001604060020a0360043516602435610f04565b341561031f57600080fd5b6102726001604060020a0360043581169060243581169060443590606435166112a7565b341561034e57600080fd5b6103626001604060020a036004351661174c565b6040516001604060020a03909116815260200160405180910390f35b341561038957600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611915915050565b341561043557600080fd5b61023e611b03565b341561044857600080fd5b6102726004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611b0d95505050505050565b341561049757600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611b789050565b341561055357600080fd5b6102726001604060020a0360043516611fa3565b341561057257600080fd5b61036260046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250612031915050565b341561061e57600080fd5b610272600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061221e95505050505050565b341561066d57600080fd5b6102726001604060020a0360043516602435612289565b341561068f57600080fd5b610362600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061233595505050505050565b6102726001604060020a0360043581169060243516612380565b34156106f857600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a031692506124ea915050565b34156107b357600080fd5b610272600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a031692506125d5915050565b341561081b57600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612642915050565b34156108d657600080fd5b6102726001604060020a036004351660243561272d565b34156108f857600080fd5b61090c6001604060020a0360043516612841565b6040518089600281111561091c57fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b8381101561099d578082015183820152602001610985565b50505050905090810190601f1680156109ca5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610a005780820151838201526020016109e8565b50505050905090810190601f168015610a2d5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610a4e57600080fd5b6102726004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650612a0695505050505050565b3415610a9d57600080fd5b610272600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612a71915050565b3415610b5857600080fd5b610b60612b5c565b604051600160a060020a03909116815260200160405180910390f35b600080610b87613d99565b600080610b9387612b6b565b91508160020160018703815481101515610ba957fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169450610bdd85612baf565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b5050505050925050509250925092565b600080610cad83612baf565b90506000815460ff166002811115610cc157fe5b1415610cd05760009150610d4b565b6002815460ff166002811115610ce257fe5b14610ce957fe5b6003810154608060020a900460ff1615610d065760019150610d4b565b6003810154604060020a90046001604060020a03161515610d2a5760009150610d4b565b6003810154610d4890604060020a90046001604060020a0316610ca1565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610d7c57600080fd5b610d8584612b6b565b91506001600383015460c060020a900460ff166002811115610da357fe5b14610dad57600080fd5b836001604060020a0316610dc085612bf5565b6001604060020a031614610dd357600080fd5b6001820154600283018054610e8c926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610e6657602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610e235790505b505050506003860154600091508190608060020a90046001604060020a03166002612cbb565b9050610e99848285612fab565b50505050565b600080600080600080600080610eb489612b6b565b805460018201546002830154600390930154919c6001604060020a039182169c50929a508082169950604060020a820481169850608060020a820416965060c060020a900460ff16945092505050565b6000806000610f128561174c565b9450610f1d85612b6b565b92506000600384015460c060020a900460ff166002811115610f3b57fe5b14610f4557600080fd5b6001830154610f5c906001604060020a0316612baf565b9150611151826101006040519081016040528154909190829060ff166002811115610f8357fe5b6002811115610f8e57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561105a5780601f1061102f5761010080835404028352916020019161105a565b820191906000526020600020905b81548152906001019060200180831161103d57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110fc5780601f106110d1576101008083540402835291602001916110fc565b820191906000526020600020905b8154815290600101906020018083116110df57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152613074565b600183015460028401805461120a926001604060020a031691906020808202016040519081016040528092919081815260200182805480156111e457602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116111a15790505b505050506003870154600091508190608060020a90046001604060020a03166001612cbb565b9050611217858286612fab565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b151561128c57600080fd5b6102c65a03f1151561129d57600080fd5b5050505050505050565b60008060008060006112b88861174c565b97506112c388612b6b565b94506112ce86612baf565b93506112d989612baf565b9250611300836101006040519081016040528154909190829060ff166002811115610f8357fe5b6000600386015460c060020a900460ff16600281111561131c57fe5b1461132657600080fd5b60018501546001604060020a038a8116911614156113c7576000845460ff16600281111561135057fe5b1415611366576113618888886130bb565b6113c2565b6002845460ff16600281111561137857fe5b1415611389576113618888886130eb565b6001845460ff16600281111561139b57fe5b14156113c0576113b388888760020180549050613314565b9750611361888888613419565bfe5b611741565b6114f88560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561149157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161144e5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156114e457fe5b60028111156114ef57fe5b9052508a613540565b6001604060020a03908116925082146113c0576000845460ff16600281111561151d57fe5b14156115545760018501546001604060020a0387811691161461153c57fe5b61154e88888760020180549050613314565b50611741565b6001845460ff16600281111561156657fe5b14156117055761169d8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561163657602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116115f35790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561168957fe5b600281111561169457fe5b90525087613540565b6001604060020a0390811691508114156116c8576113b3888860018589600201805490500303613314565b818111156116e7576113b3888860018589600201805490500303613314565b8181116113c25761154e888860018489600201805490500303613314565b6002845460ff16600281111561171757fe5b14156113c057611734888860018589600201805490500303613314565b97506113c28888886135a6565b505050505050505050565b60008060008061175b85612b6b565b92506000600384015460c060020a900460ff16600281111561177957fe5b146117865784935061190d565b600383015460006001604060020a039091161180156117bf57506003830154604060020a90046001604060020a03166117bd6138b5565b115b156118dc57600183015460028401805461187c926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561185757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118145790505b505050506003870154600091508190608060020a90046001604060020a031681612cbb565b60038401549092506118bc906001604060020a031660006040518059106118a05750595b9080825280602002602001820160405250600080866000612cbb565b90506118cd85828560000154612fab565b8094506118d985612b6b565b92505b6118e585612bf5565b90506001604060020a03808216908616146119095761190985828560000154612fab565b8093505b505050919050565b6001805490818082016119288382613dab565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156119a757fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516119ed929160200190613ddc565b50606082015181600201908051611a08929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b600080805b8351831015610e99576001604060020a03848481518110611b2f57fe5b90602001906020020151169150604060020a848481518110611b4d57fe5b90602001906020020151811515611b6057fe5b049050611b6d8282610f04565b600190920191611b12565b6000806001604060020a03851615611db057611b9385612baf565b90506002815460ff166002811115611ba757fe5b14611bb157600080fd5b6014611da6826101006040519081016040528154909190829060ff166002811115611bd857fe5b6002811115611be357fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611caf5780601f10611c8457610100808354040283529160200191611caf565b820191906000526020600020905b815481529060010190602001808311611c9257829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d515780601f10611d2657610100808354040283529160200191611d51565b820191906000526020600020905b815481529060010190602001808311611d3457829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526138b9565b10611db057600080fd5b60018054925082808201611dc48382613dab565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115611e4457fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611e8a929160200190613ddc565b50606082015181600201908051611ea5929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b6000611fae82612baf565b9050611fd5816101006040519081016040528154909190829060ff166002811115610f8357fe5b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25050565b6001805490818082016120448382613dab565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156120c357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612109929160200190613ddc565b50606082015181600201908051612124929160200190613ddc565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b600080805b8351831015610e99576001604060020a0384848151811061224057fe5b90602001906020020151169150604060020a84848151811061225e57fe5b9060200190602002015181151561227157fe5b04905061227e8282610d5c565b600190920191612223565b60008060006122978561174c565b94506122a285612b6b565b6003810154909350608060020a90046001604060020a031615156122c557600080fd5b60018301546122dc906001604060020a0316612baf565b9150612303826101006040519081016040528154909190829060ff166002811115610f8357fe5b600383015461232190608060020a90046001604060020a0316612bf5565b905061232e858286612fab565b5050505050565b600080805b8351821015612379576001604060020a0384838151811061235757fe5b9060200190602002015116905061236d8161174c565b5060019091019061233a565b5050919050565b60008080806001604060020a03861615156123c6576123c36020604051908101604052806000815250602060405190810160405260008082526203f48090612031565b95505b6123cf86612baf565b93506123f6846101006040519081016040528154909190829060ff166002811115610f8357fe5b6000845460ff16600281111561240857fe5b1461241257600080fd5b3492506000831161242257600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f19350505050151561245557600080fd5b6124848660006040518059106124685750595b9080825280602002602001820160405250600080600080612cbb565b915061248f82612b6b565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a36124e2868385886112a7565b505050505050565b60006124f586612baf565b90506001815460ff16600281111561250957fe5b1461251357600080fd5b805433600160a060020a03908116610100909204161461253257600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612565929160200190613ddc565b506002810183805161257b929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b600080805b84518310156124e2576001604060020a038584815181106125f757fe5b90602001906020020151169150604060020a85848151811061261557fe5b9060200190602002015181151561262857fe5b049050612637868383876112a7565b6001909201916125da565b600061264d86612baf565b90506000815460ff16600281111561266157fe5b1461266b57600080fd5b805433600160a060020a03908116610100909204161461268a57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516126bd929160200190613ddc565b50600281018380516126d3929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b600254600090819033600160a060020a0390811691161461274d57600080fd5b61275684612b6b565b91506001600383015460c060020a900460ff16600281111561277457fe5b1461277e57600080fd5b6001820154600283018054612836926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561281157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116127ce5790505b505050506003860154600091508190608060020a90046001604060020a031681612cbb565b9050610e8c8161174c565b60008061284c613d99565b612854613d99565b60008060008060006128658a612baf565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f8201819004810201604051908101604052809291908181526020018280546001816001161561010002031660029004801561291b5780601f106128f05761010080835404028352916020019161291b565b820191906000526020600020905b8154815290600101906020018083116128fe57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ba5780601f1061298f576101008083540402835291602001916129ba565b820191906000526020600020905b81548152906001019060200180831161299d57829003601f168201915b5050505060038301546004909301549a9c999b50979990986001604060020a038084169950604060020a8404169750608060020a90920460ff169550600160a060020a03169350915050565b600080805b8351831015610e99576001604060020a03848481518110612a2857fe5b90602001906020020151169150604060020a848481518110612a4657fe5b90602001906020020151811515612a5957fe5b049050612a66828261272d565b600190920191612a0b565b6000612a7c86612baf565b90506002815460ff166002811115612a9057fe5b14612a9a57600080fd5b805433600160a060020a039081166101009092041614612ab957600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612aec929160200190613ddc565b5060028101838051612b02929160200190613ddc565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b600080546001604060020a03831610612b8357600080fd5b600080546001604060020a038416908110612b9a57fe5b90600052602060002090600402019050919050565b6001546000906001604060020a03831610612bc957600080fd5b600180546001604060020a038416908110612be057fe5b90600052602060002090600502019050919050565b600080806001604060020a0384161515612c125760009250612379565b612c1b84612b6b565b6001810154909250612c35906001604060020a0316612baf565b90506000815460ff166002811115612c4957fe5b1415612c5757839250612379565b6002815460ff166002811115612c6957fe5b14612c7057fe5b6001820154612c87906001604060020a0316610ca1565b1515612c9557839250612379565b6003820154612cb390608060020a90046001604060020a0316612bf5565b949350505050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b83811015612d08578082015183820152602001612cf0565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a028152600801826002811115612d7557fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a039091169150811115612dde57809250612f9f565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a038316179055815490919060018101612e1c8382613e5a565b9160005260206000209060040201600060e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a03168152602001886002811115612e8d57fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a0392909216919091179055604082015181600201908051612ed8929160200190613e86565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a836002811115612f9357fe5b02179055505050508092505b50509695505050505050565b6000806000612fbd6001878787613923565b9250846001604060020a0316866001604060020a03161415612fde576124e2565b821515612fea576124e2565b612ff386612b6b565b9150612ffe85612b6b565b82549091508390101561301057600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a361306b6000878786613923565b50505050505050565b8060200151600160a060020a031633600160a060020a031614806130ad57508060e00151600160a060020a031633600160a060020a0316145b15156130b857600080fd5b50565b6000610e8c8260006040518059106124685750599080825280602002602001820160405250600080600080612cbb565b60008060006130f986612b6b565b9250601461322d8460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116131845790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b600281111561322557fe5b905250613949565b1061323757600080fd5b61324084610ca1565b1561324a57600080fd5b60018301546002840180546132d7926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561185757600091825260209182902080546001604060020a031684529082028301929091600891018084116118145750505050600388015460009250829150608060020a90046001604060020a031681612cbb565b91506133078460006040518059106118a05750599080825280602002602001820160405250600080866000612cbb565b90506124e2868287612fab565b60008061331f613d99565b60008061332b88612b6b565b60028101549094508690036040518059106133435750595b90808252806020026020018201604052509250600091505b60028401548690038210156133d1576002840180548390811061337a57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03168383815181106133af57fe5b6001604060020a0390921660209283029091019091015260019091019061335b565b60018401546003850154613401916001604060020a039081169186916000918291608060020a9091041681612cbb565b905061340e888289612fab565b979650505050505050565b6000613423613d99565b60008061342f87612b6b565b60028101549094506014901061344457600080fd5b60028401546001016040518059106134595750595b90808252806020026020018201604052509250600091505b60028401548210156134e4576002840180548390811061348d57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03168383815181106134c257fe5b6001604060020a03909216602092830290910190910152600190910190613471565b600284015485908490815181106134f757fe5b6001604060020a039283166020918202909201015260018501546003860154613533929182169186916000918291608060020a90041681612cbb565b905061306b878288612fab565b6000805b83604001515181101561359457826001604060020a03168460400151828151811061356b57fe5b906020019060200201516001604060020a0316141561358c5780915061359f565b600101613544565b6001604060020a0391505b5092915050565b6000806135b285612b6b565b915060146136a88360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757600091825260209182902080546001604060020a031684529082028301929091600891018084116131845750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b106136b257600080fd5b6136bb83610ca1565b156136c557600080fd5b6001820154600283018054612321926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561375857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116137155790505b50505050508561388e8660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561382857602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116137e55790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561387b57fe5b600281111561388657fe5b905250613a74565b6138966138b5565b6003880154910190608060020a90046001604060020a03166000612cbb565b4290565b6000806002835160028111156138cb57fe5b146138d257fe5b8260a001516001604060020a031615156138ef5760019150610d4b565b6138fc8360a00151612baf565b9050610d48816101006040519081016040528154909190829060ff166002811115611bd857fe5b806139318585808685613afe565b90506139408584868685613afe565b95945050505050565b6000808260a001516001604060020a031615156139695760009150610d4b565b6139768360a00151612b6b565b9050613a6a8160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156131c757600091825260209182902080546001604060020a031684529082028301929091600891018084116131845750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561321a57fe5b6001019392505050565b6000806000613a868460200151612baf565b60038101546001604060020a031693509150600090505b83604001515181101561237957613acc84604001518281518110613abd57fe5b90602001906020020151612baf565b60038101549092506001604060020a031683901115613af65760038201546001604060020a031692505b600101613a9d565b600080600080866001604060020a0316886001604060020a031614613b2557610100613b28565b60005b61ffff169250849350613b3a88612b6b565b6001810154909250613b5a908a906001604060020a031689898789613c1c565b9350600090505b60028201546001604060020a0382161015613bd557613bcb8983600201836001604060020a0316815481101515613b9457fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316898985880160010189613c1c565b9350600101613b61565b600382015460006001604060020a039091161115613c10576003820154613c0d908a906001604060020a0316898960ff880189613c1c565b93505b50505095945050505050565b80600080613c2988612baf565b6004810154909150600160a060020a031615801590613c485750600083115b15612f9f578815613d03576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b1515613cd257600080fd5b6102c65a03f11515613ce357600080fd5b505050604051805192505082821115613cfb57600080fd5b819250612f9f565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b1515613d7957600080fd5b6102c65a03f11515613d8a57600080fd5b50505050509695505050505050565b60206040519081016040526000815290565b815481835581811511613dd757600502816005028360005260206000209182019101613dd79190613f3a565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e1d57805160ff1916838001178555613e4a565b82800160010185558215613e4a579182015b82811115613e4a578251825591602001919060010190613e2f565b50613e56929150613fc5565b5090565b815481835581811511613dd757600402816004028360005260206000209182019101613dd79190613fdf565b82805482825590600052602060002090600301600490048101928215613f2e5791602002820160005b83821115613ef957835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302613eaf565b8015613f2c5782816101000a8154906001604060020a030219169055600801602081600701049283019260010302613ef9565b505b50613e5692915061403f565b610d5991905b80821115613e5657805474ffffffffffffffffffffffffffffffffffffffffff191681556000613f736001830182614064565b613f81600283016000614064565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501613f40565b610d5991905b80821115613e565760008155600101613fcb565b610d5991905b80821115613e5657600080825560018201805467ffffffffffffffff1916905561401260028301826140a8565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401613fe5565b610d5991905b80821115613e5657805467ffffffffffffffff19168155600101614045565b50805460018160011615610100020316600290046000825580601f1061408a57506130b8565b601f0160209004906000526020600020908101906130b89190613fc5565b5080546000825560030160049004906000526020600020908101906130b89190613fc55600a165627a7a72305820463a47bbd3cd6e46fb821af37a9038953193f9f8f25e5b054212339a7479723b0029" +exports.LiquidPledgingBaseAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingBaseByteCode = "0x606060405234156200001057600080fd5b60405160208062001cb0833981016040528080519150600190506200003681806200006d565b50600162000046600082620000a1565b5060028054600160a060020a031916600160a060020a039290921691909117905562000239565b8154818355818115116200009c576005028160050283600052602060002091820191016200009c9190620000d0565b505050565b8154818355818115116200009c576004028160040283600052602060002091820191016200009c919062000144565b6200014191905b808211156200013d578054600160a860020a03191681556000620000ff6001830182620001af565b6200010f600283016000620001af565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000d7565b5090565b90565b6200014191905b808211156200013d57600080825560018201805467ffffffffffffffff191690556200017b6002830182620001fa565b506003810180547fffffffffffffff000000000000000000000000000000000000000000000000001690556004016200014b565b50805460018160011615610100020316600290046000825580601f10620001d75750620001f7565b601f016020900490600052602060002090810190620001f791906200021c565b50565b508054600082556003016004900490600052602060002090810190620001f791905b6200014191905b808211156200013d576000815560010162000223565b611a6780620002496000396000f3006060604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166314e7b1dc81146100c95780632101a6ad146101845780632a8ec8cc146101b85780633f657a46146101dd57806352dc7dcc1461025d5780635503d9ba1461032757806372116e921461033a5780637f61fa93146103f7578063cc19ecf7146104a4578063db7c231414610563578063eba8ba0614610620578063f6b24b1c14610778578063fbfa77cf14610835575b600080fd5b34156100d457600080fd5b6100ec67ffffffffffffffff60043516602435610864565b60405167ffffffffffffffff84168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b8381101561014757808201518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561018f57600080fd5b6101a467ffffffffffffffff6004351661098a565b604051901515815260200160405180910390f35b34156101c357600080fd5b6101cb610a46565b60405190815260200160405180910390f35b34156101e857600080fd5b6101fd67ffffffffffffffff60043516610a51565b60405187815267ffffffffffffffff8088166020830152868116604083015285811660608301528481166080830152831660a082015260c0810182600281111561024357fe5b60ff16815260200197505050505050505060405180910390f35b341561026857600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250610ad1915050565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033257600080fd5b6101cb610cc4565b341561034557600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a03853581169567ffffffffffffffff602082013581169650604082013516945060600135169150610cce9050565b341561040257600080fd5b61030a60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833567ffffffffffffffff169360200135600160a060020a03169250611105915050565b34156104af57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506112f7915050565b005b341561056e57600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff1692506113e3915050565b341561062b57600080fd5b61064067ffffffffffffffff600435166114cf565b6040518089600281111561065057fe5b60ff168152600160a060020a03898116602083015267ffffffffffffffff8781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156106d25780820151838201526020016106ba565b50505050905090810190601f1680156106ff5780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561073557808201518382015260200161071d565b50505050905090810190601f1680156107625780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b341561078357600080fd5b6105616004803567ffffffffffffffff169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050923567ffffffffffffffff16925061169a915050565b341561084057600080fd5b610848611786565b604051600160a060020a03909116815260200160405180910390f35b60008061086f61188e565b60008061087b87611795565b9150816002016001870381548110151561089157fe5b90600052602060002090600491828204019190066008029054906101000a900467ffffffffffffffff1694506108c6856117db565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050925050509250925092565b600080610996836117db565b90506000815460ff1660028111156109aa57fe5b14156109b95760009150610a40565b6002815460ff1660028111156109cb57fe5b146109d257fe5b6003810154608060020a900460ff16156109ef5760019150610a40565b600381015468010000000000000000900467ffffffffffffffff161515610a195760009150610a40565b6003810154610a3d9068010000000000000000900467ffffffffffffffff1661098a565b91505b50919050565b600054600019015b90565b600080600080600080600080610a6689611795565b805460018201546002830154600390930154919c67ffffffffffffffff9182169c50929a50808216995068010000000000000000820481169850608060020a82041696507801000000000000000000000000000000000000000000000000900460ff16945092505050565b600180549081808201610ae483826118a0565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff19166001836002811115610b6457fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610baa9291602001906118d1565b50606082015181600201908051610bc59291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b60008067ffffffffffffffff851615610f0d57610cea856117db565b90506002815460ff166002811115610cfe57fe5b14610d0857600080fd5b6014610f03826101006040519081016040528154909190829060ff166002811115610d2f57fe5b6002811115610d3a57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e065780601f10610ddb57610100808354040283529160200191610e06565b820191906000526020600020905b815481529060010190602001808311610de957829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b5050509183525050600382015467ffffffffffffffff8082166020840152680100000000000000008204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152611823565b10610f0d57600080fd5b60018054925082808201610f2183826118a0565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d905267ffffffffffffffff808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115610fa257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051610fe89291602001906118d1565b506060820151816002019080516110039291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff82167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b60018054908180820161111883826118a0565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a905267ffffffffffffffff89166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561119857fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a03199091161781556040820151816001019080516111de9291602001906118d1565b506060820151816002019080516111f99291602001906118d1565b50608082015160038201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560a08201518160030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055505067ffffffffffffffff81167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b6000611302866117db565b90506001815460ff16600281111561131657fe5b1461132057600080fd5b805433600160a060020a03908116610100909204161461133f57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516113729291602001906118d1565b50600281018380516113889291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b60006113ee866117db565b90506000815460ff16600281111561140257fe5b1461140c57600080fd5b805433600160a060020a03908116610100909204161461142b57600080fd5b805461010060a860020a031916610100600160a060020a038716021781556001810184805161145e9291602001906118d1565b50600281018380516114749291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b6000806114da61188e565b6114e261188e565b60008060008060006114f38a6117db565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a95780601f1061157e576101008083540402835291602001916115a9565b820191906000526020600020905b81548152906001019060200180831161158c57829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b5050505060038301546004909301549a9c999b509799909867ffffffffffffffff8084169950680100000000000000008404169750608060020a90920460ff169550600160a060020a03169350915050565b60006116a5866117db565b90506002815460ff1660028111156116b957fe5b146116c357600080fd5b805433600160a060020a0390811661010090920416146116e257600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516117159291602001906118d1565b506002810183805161172b9291602001906118d1565b5060038101805467ffffffffffffffff191667ffffffffffffffff8481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b6000805467ffffffffffffffff8316106117ae57600080fd5b6000805467ffffffffffffffff84169081106117c657fe5b90600052602060002090600402019050919050565b60015460009067ffffffffffffffff8316106117f657600080fd5b6001805467ffffffffffffffff841690811061180e57fe5b90600052602060002090600502019050919050565b60008060028351600281111561183557fe5b1461183c57fe5b8260a0015167ffffffffffffffff16151561185a5760019150610a40565b6118678360a001516117db565b9050610a3d816101006040519081016040528154909190829060ff166002811115610d2f57fe5b60206040519081016040526000815290565b8154818355818115116118cc576005028160050283600052602060002091820191016118cc919061194f565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061191257805160ff191683800117855561193f565b8280016001018555821561193f579182015b8281111561193f578251825591602001919060010190611924565b5061194b9291506119da565b5090565b610a4e91905b8082111561194b57805474ffffffffffffffffffffffffffffffffffffffffff19168155600061198860018301826119f4565b6119966002830160006119f4565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501611955565b610a4e91905b8082111561194b57600081556001016119e0565b50805460018160011615610100020316600290046000825580601f10611a1a5750611a38565b601f016020900490600052602060002090810190611a3891906119da565b505600a165627a7a7230582044fb29e66b8d398a100a2a865d99dd61103f480bd026724c1770cad088d08f400029" +exports.LiquidPledgingMockAbi = [{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"idxDelegate","type":"uint256"}],"name":"getPledgeDelegate","outputs":[{"name":"idDelegate","type":"uint64"},{"name":"addr","type":"address"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"projectId","type":"uint64"}],"name":"isProjectCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledges","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"getPledge","outputs":[{"name":"amount","type":"uint256"},{"name":"owner","type":"uint64"},{"name":"nDelegates","type":"uint64"},{"name":"intendedProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"oldPledge","type":"uint64"},{"name":"paymentState","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"},{"name":"idReceiver","type":"uint64"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"}],"name":"normalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addDelegate","outputs":[{"name":"idDelegate","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numberOfPledgeAdmins","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"projectAdmin","type":"address"},{"name":"parentProject","type":"uint64"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addProject","outputs":[{"name":"idProject","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"}],"name":"cancelProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"plugin","type":"address"}],"name":"addGiver","outputs":[{"name":"idGiver","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mConfirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mock_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_t","type":"uint256"}],"name":"setMockedTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPledge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledges","type":"uint256[]"}],"name":"mNormalizePledge","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"idReceiver","type":"uint64"}],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"idDelegate","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idSender","type":"uint64"},{"name":"pledgesAmounts","type":"uint256[]"},{"name":"idReceiver","type":"uint64"}],"name":"mTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idGiver","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateGiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idPledge","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idAdmin","type":"uint64"}],"name":"getPledgeAdmin","outputs":[{"name":"adminType","type":"uint8"},{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"url","type":"string"},{"name":"commitTime","type":"uint64"},{"name":"parentProject","type":"uint64"},{"name":"canceled","type":"bool"},{"name":"plugin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pledgesAmounts","type":"uint256[]"}],"name":"mCancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idProject","type":"uint64"},{"name":"newAddr","type":"address"},{"name":"newName","type":"string"},{"name":"newUrl","type":"string"},{"name":"newCommitTime","type":"uint64"}],"name":"updateProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_vault","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"uint64"},{"indexed":true,"name":"to","type":"uint64"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"CancelProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idGiver","type":"uint64"}],"name":"GiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDelegate","type":"uint64"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idProject","type":"uint64"}],"name":"ProjectAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idAdmin","type":"uint64"}],"name":"ProjectUpdated","type":"event"}] +exports.LiquidPledgingMockByteCode = "0x606060405234156200001057600080fd5b6040516020806200439683398101604052808051915081905080600162000038818062000075565b50600162000048600082620000a9565b5060028054600160a060020a031916600160a060020a039290921691909117905550504260045562000241565b815481835581811511620000a457600502816005028360005260206000209182019101620000a49190620000d8565b505050565b815481835581811511620000a457600402816004028360005260206000209182019101620000a491906200014c565b6200014991905b8082111562000145578054600160a860020a03191681556000620001076001830182620001b7565b62000117600283016000620001b7565b506003810180546001608860020a0319169055600481018054600160a060020a0319169055600501620000df565b5090565b90565b6200014991905b808211156200014557600080825560018201805467ffffffffffffffff1916905562000183600283018262000202565b506003810180547fffffffffffffff0000000000000000000000000000000000000000000000000016905560040162000153565b50805460018160011615610100020316600290046000825580601f10620001df5750620001ff565b601f016020900490600052602060002090810190620001ff919062000224565b50565b508054600082556003016004900490600052602060002090810190620001ff91905b6200014991905b808211156200014557600081556001016200022b565b61414580620002516000396000f3006060604052600436106101505763ffffffff60e060020a60003504166314e7b1dc81146101555780632101a6ad1461020e5780632a8ec8cc146102415780632ee88808146102665780633f657a461461028a578063433879831461030857806347c5ef431461032a57806350f8a8031461035957806352dc7dcc146103945780635503d9ba1461044057806357adafb61461045357806372116e92146104a2578063796d56541461055e5780637f61fa931461057d5780639398f5a2146106295780639da47a6b14610678578063ab8be2311461068b578063af9f4563146106a1578063bce0906d146106c3578063bde60ac914610712578063cc19ecf71461072c578063d639cd73146107e7578063db7c23141461084f578063e9c211e21461090a578063eba8ba061461092c578063ef3766e414610a82578063f6b24b1c14610ad1578063fbfa77cf14610b8c575b600080fd5b341561016057600080fd5b6101776001604060020a0360043516602435610bbb565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156101d15780820151838201526020016101b9565b50505050905090810190601f1680156101fe5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561021957600080fd5b61022d6001604060020a0360043516610ce0565b604051901515815260200160405180910390f35b341561024c57600080fd5b610254610d90565b60405190815260200160405180910390f35b341561027157600080fd5b6102886001604060020a0360043516602435610d9b565b005b341561029557600080fd5b6102a96001604060020a0360043516610ede565b6040518781526001604060020a038088166020830152868116604083015285811660608301528481166080830152831660a082015260c081018260028111156102ee57fe5b60ff16815260200197505050505050505060405180910390f35b341561031357600080fd5b6102886001604060020a0360043516602435610f43565b341561033557600080fd5b6102886001604060020a0360043581169060243581169060443590606435166112e6565b341561036457600080fd5b6103786001604060020a036004351661178b565b6040516001604060020a03909116815260200160405180910390f35b341561039f57600080fd5b61037860046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611954915050565b341561044b57600080fd5b610254611b42565b341561045e57600080fd5b6102886004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611b4c95505050505050565b34156104ad57600080fd5b61037860046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050600160a060020a0385358116956001604060020a03602082013581169650604082013516945060600135169150611bb79050565b341561056957600080fd5b6102886001604060020a0360043516611fe2565b341561058857600080fd5b61037860046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250612070915050565b341561063457600080fd5b610288600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061225d95505050505050565b341561068357600080fd5b6102546122c8565b341561069657600080fd5b6102886004356122ce565b34156106ac57600080fd5b6102886001604060020a03600435166024356122d3565b34156106ce57600080fd5b610378600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061237f95505050505050565b6102886001604060020a03600435811690602435166123ca565b341561073757600080fd5b610288600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612534915050565b34156107f257600080fd5b610288600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a0316925061261f915050565b341561085a57600080fd5b610288600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a0316925061268c915050565b341561091557600080fd5b6102886001604060020a0360043516602435612777565b341561093757600080fd5b61094b6001604060020a036004351661288b565b6040518089600281111561095b57fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b838110156109dc5780820151838201526020016109c4565b50505050905090810190601f168015610a095780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610a3f578082015183820152602001610a27565b50505050905090810190601f168015610a6c5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610a8d57600080fd5b6102886004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650612a5095505050505050565b3415610adc57600080fd5b610288600480356001604060020a03169060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505092356001604060020a03169250612abb915050565b3415610b9757600080fd5b610b9f612ba6565b604051600160a060020a03909116815260200160405180910390f35b600080610bc6613de5565b600080610bd287612bb5565b91508160020160018703815481101515610be857fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169450610c1c85612bf9565b90508060000160019054906101000a9004600160a060020a03169350806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b5050505050925050509250925092565b600080610cec83612bf9565b90506000815460ff166002811115610d0057fe5b1415610d0f5760009150610d8a565b6002815460ff166002811115610d2157fe5b14610d2857fe5b6003810154608060020a900460ff1615610d455760019150610d8a565b6003810154604060020a90046001604060020a03161515610d695760009150610d8a565b6003810154610d8790604060020a90046001604060020a0316610ce0565b91505b50919050565b600054600019015b90565b600254600090819033600160a060020a03908116911614610dbb57600080fd5b610dc484612bb5565b91506001600383015460c060020a900460ff166002811115610de257fe5b14610dec57600080fd5b836001604060020a0316610dff85612c3f565b6001604060020a031614610e1257600080fd5b6001820154600283018054610ecb926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610ea557602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610e625790505b505050506003860154600091508190608060020a90046001604060020a03166002612d05565b9050610ed8848285612ff5565b50505050565b600080600080600080600080610ef389612bb5565b805460018201546002830154600390930154919c6001604060020a039182169c50929a508082169950604060020a820481169850608060020a820416965060c060020a900460ff16945092505050565b6000806000610f518561178b565b9450610f5c85612bb5565b92506000600384015460c060020a900460ff166002811115610f7a57fe5b14610f8457600080fd5b6001830154610f9b906001604060020a0316612bf9565b9150611190826101006040519081016040528154909190829060ff166002811115610fc257fe5b6002811115610fcd57fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561113b5780601f106111105761010080835404028352916020019161113b565b820191906000526020600020905b81548152906001019060200180831161111e57829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a03166080909101526130be565b6001830154600284018054611249926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561122357602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116111e05790505b505050506003870154600091508190608060020a90046001604060020a03166001612d05565b9050611256858286612ff5565b6002548254600160a060020a039182169163bb4f28df916001604060020a03851691610100909104168760405160e060020a63ffffffff86160281526004810193909352600160a060020a0390911660248301526044820152606401600060405180830381600087803b15156112cb57600080fd5b6102c65a03f115156112dc57600080fd5b5050505050505050565b60008060008060006112f78861178b565b975061130288612bb5565b945061130d86612bf9565b935061131889612bf9565b925061133f836101006040519081016040528154909190829060ff166002811115610fc257fe5b6000600386015460c060020a900460ff16600281111561135b57fe5b1461136557600080fd5b60018501546001604060020a038a811691161415611406576000845460ff16600281111561138f57fe5b14156113a5576113a0888888613105565b611401565b6002845460ff1660028111156113b757fe5b14156113c8576113a0888888613135565b6001845460ff1660028111156113da57fe5b14156113ff576113f28888876002018054905061335e565b97506113a0888888613463565bfe5b611780565b6115378560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a03168152602001600282018054806020026020016040519081016040528092919081815260200182805480156114d057602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161148d5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561152357fe5b600281111561152e57fe5b9052508a61358a565b6001604060020a03908116925082146113ff576000845460ff16600281111561155c57fe5b14156115935760018501546001604060020a0387811691161461157b57fe5b61158d8888876002018054905061335e565b50611780565b6001845460ff1660028111156115a557fe5b1415611744576116dc8560e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561167557602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116116325790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156116c857fe5b60028111156116d357fe5b9052508761358a565b6001604060020a039081169150811415611707576113f288886001858960020180549050030361335e565b81811115611726576113f288886001858960020180549050030361335e565b8181116114015761158d88886001848960020180549050030361335e565b6002845460ff16600281111561175657fe5b14156113ff5761177388886001858960020180549050030361335e565b97506114018888886135f0565b505050505050505050565b60008060008061179a85612bb5565b92506000600384015460c060020a900460ff1660028111156117b857fe5b146117c55784935061194c565b600383015460006001604060020a039091161180156117fe57506003830154604060020a90046001604060020a03166117fc6138ff565b115b1561191b5760018301546002840180546118bb926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561189657602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118535790505b505050506003870154600091508190608060020a90046001604060020a031681612d05565b60038401549092506118fb906001604060020a031660006040518059106118df5750595b9080825280602002602001820160405250600080866000612d05565b905061190c85828560000154612ff5565b80945061191885612bb5565b92505b61192485612c3f565b90506001604060020a03808216908616146119485761194885828560000154612ff5565b8093505b505050919050565b6001805490818082016119678382613df7565b916000526020600020906005020160006101006040519081016040528060018152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff191660018360028111156119e657fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611a2c929160200190613e28565b50606082015181600201908051611a47929160200190613e28565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167f014882843f1e57bd41e0826ad1cd5e6180d4d4f76df8b12edc8b44575322d94e60405160405180910390a2949350505050565b6001546000190190565b600080805b8351831015610ed8576001604060020a03848481518110611b6e57fe5b90602001906020020151169150604060020a848481518110611b8c57fe5b90602001906020020151811515611b9f57fe5b049050611bac8282610f43565b600190920191611b51565b6000806001604060020a03851615611def57611bd285612bf9565b90506002815460ff166002811115611be657fe5b14611bf057600080fd5b6014611de5826101006040519081016040528154909190829060ff166002811115611c1757fe5b6002811115611c2257fe5b81526020016000820160019054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cee5780601f10611cc357610100808354040283529160200191611cee565b820191906000526020600020905b815481529060010190602001808311611cd157829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d905780601f10611d6557610100808354040283529160200191611d90565b820191906000526020600020905b815481529060010190602001808311611d7357829003601f168201915b505050918352505060038201546001604060020a038082166020840152604060020a8204166040830152608060020a900460ff1615156060820152600490910154600160a060020a0316608090910152613905565b10611def57600080fd5b60018054925082808201611e038382613df7565b916000526020600020906005020160006101006040519081016040528060028152600160a060020a03808c166020830152604082018e9052606082018d90526001604060020a03808b1660808401528b1660a0830152600060c0830152881660e09091015291905081518154829060ff19166001836002811115611e8357fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051611ec9929160200190613e28565b50606082015181600201908051611ee4929160200190613e28565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0382167fd7db7003e8f35149eda3d3685c2ab151ee561ad34853fdb0f4d7ecb33fff889060405160405180910390a2509695505050505050565b6000611fed82612bf9565b9050612014816101006040519081016040528154909190829060ff166002811115610fc257fe5b60038101805470ff000000000000000000000000000000001916608060020a1790556001604060020a0382167f2d65c225503bd4cd245a36c8030073ddd0fb02c23ce540fcd901e74e5006687c60405160405180910390a25050565b6001805490818082016120838382613df7565b916000526020600020906005020160006101006040519081016040528060008152600160a060020a033381166020830152604082018b9052606082018a90526001604060020a0389166080830152600060a0830181905260c0830152871660e09091015291905081518154829060ff1916600183600281111561210257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181600101908051612148929160200190613e28565b50606082015181600201908051612163929160200190613e28565b50608082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560a08201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060c0820151600382018054911515608060020a0270ff000000000000000000000000000000001990921691909117905560e0820151600491909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905550506001604060020a0381167efc763def3c85dbc7bab43e314ba21264ec158217c45cf1eaf94f5ae15bc2c560405160405180910390a2949350505050565b600080805b8351831015610ed8576001604060020a0384848151811061227f57fe5b90602001906020020151169150604060020a84848151811061229d57fe5b906020019060200201518115156122b057fe5b0490506122bd8282610d9b565b600190920191612262565b60045481565b600455565b60008060006122e18561178b565b94506122ec85612bb5565b6003810154909350608060020a90046001604060020a0316151561230f57600080fd5b6001830154612326906001604060020a0316612bf9565b915061234d826101006040519081016040528154909190829060ff166002811115610fc257fe5b600383015461236b90608060020a90046001604060020a0316612c3f565b9050612378858286612ff5565b5050505050565b600080805b83518210156123c3576001604060020a038483815181106123a157fe5b906020019060200201511690506123b78161178b565b50600190910190612384565b5050919050565b60008080806001604060020a03861615156124105761240d6020604051908101604052806000815250602060405190810160405260008082526203f48090612070565b95505b61241986612bf9565b9350612440846101006040519081016040528154909190829060ff166002811115610fc257fe5b6000845460ff16600281111561245257fe5b1461245c57600080fd5b3492506000831161246c57600080fd5b600254600160a060020a031683156108fc0284604051600060405180830381858888f19350505050151561249f57600080fd5b6124ce8660006040518059106124b25750595b9080825280602002602001820160405250600080600080612d05565b91506124d982612bb5565b80548401815590506001604060020a03821660007feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a361252c868385886112e6565b505050505050565b600061253f86612bf9565b90506001815460ff16600281111561255357fe5b1461255d57600080fd5b805433600160a060020a03908116610100909204161461257c57600080fd5b805461010060a860020a031916610100600160a060020a03871602178155600181018480516125af929160200190613e28565b50600281018380516125c5929160200190613e28565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f01a3bd608e7be74358498f90bd2ff305f9fdb8e94d76167f40fef03aae56620360405160405180910390a2505050505050565b600080805b845183101561252c576001604060020a0385848151811061264157fe5b90602001906020020151169150604060020a85848151811061265f57fe5b9060200190602002015181151561267257fe5b049050612681868383876112e6565b600190920191612624565b600061269786612bf9565b90506000815460ff1660028111156126ab57fe5b146126b557600080fd5b805433600160a060020a0390811661010090920416146126d457600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612707929160200190613e28565b506002810183805161271d929160200190613e28565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167fe8da06f5d4d8fa2ef122c9fc3d5ae15379d95f5b9ebf92a5821b57705600320a60405160405180910390a2505050505050565b600254600090819033600160a060020a0390811691161461279757600080fd5b6127a084612bb5565b91506001600383015460c060020a900460ff1660028111156127be57fe5b146127c857600080fd5b6001820154600283018054612880926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561285b57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116128185790505b505050506003860154600091508190608060020a90046001604060020a031681612d05565b9050610ecb8161178b565b600080612896613de5565b61289e613de5565b60008060008060006128af8a612bf9565b80546001808301805460ff84169d5061010093849004600160a060020a03169c509394509260029181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156129655780601f1061293a57610100808354040283529160200191612965565b820191906000526020600020905b81548152906001019060200180831161294857829003601f168201915b50505050509650806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a045780601f106129d957610100808354040283529160200191612a04565b820191906000526020600020905b8154815290600101906020018083116129e757829003601f168201915b5050505060038301546004909301549a9c999b50979990986001604060020a038084169950604060020a8404169750608060020a90920460ff169550600160a060020a03169350915050565b600080805b8351831015610ed8576001604060020a03848481518110612a7257fe5b90602001906020020151169150604060020a848481518110612a9057fe5b90602001906020020151811515612aa357fe5b049050612ab08282612777565b600190920191612a55565b6000612ac686612bf9565b90506002815460ff166002811115612ada57fe5b14612ae457600080fd5b805433600160a060020a039081166101009092041614612b0357600080fd5b805461010060a860020a031916610100600160a060020a0387160217815560018101848051612b36929160200190613e28565b5060028101838051612b4c929160200190613e28565b5060038101805467ffffffffffffffff19166001604060020a038481169190911790915586167f035196d5942819024277421e936a2e76840abb7bb5a320924ce0a9826daeba4460405160405180910390a2505050505050565b600254600160a060020a031681565b600080546001604060020a03831610612bcd57600080fd5b600080546001604060020a038416908110612be457fe5b90600052602060002090600402019050919050565b6001546000906001604060020a03831610612c1357600080fd5b600180546001604060020a038416908110612c2a57fe5b90600052602060002090600502019050919050565b600080806001604060020a0384161515612c5c57600092506123c3565b612c6584612bb5565b6001810154909250612c7f906001604060020a0316612bf9565b90506000815460ff166002811115612c9357fe5b1415612ca1578392506123c3565b6002815460ff166002811115612cb357fe5b14612cba57fe5b6001820154612cd1906001604060020a0316610ce0565b1515612cdf578392506123c3565b6003820154612cfd90608060020a90046001604060020a0316612c3f565b949350505050565b600080600088888888888860405160c060020a6001604060020a03881602815260088101868051906020019060200280838360005b83811015612d52578082015183820152602001612d3a565b50505050905001856001604060020a03166001604060020a031660c060020a028152600801846001604060020a03166001604060020a031660c060020a028152600801836001604060020a03166001604060020a031660c060020a028152600801826002811115612dbf57fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010196505050505050506040519081900390206000818152600360205260408120549193506001604060020a039091169150811115612e2857809250612fe9565b5060008054828252600360205260408220805467ffffffffffffffff19166001604060020a038316179055815490919060018101612e668382613ea6565b9160005260206000209060040201600060e060405190810160405280600081526020018d6001604060020a031681526020018c81526020018b6001604060020a031681526020018a6001604060020a03168152602001896001604060020a03168152602001886002811115612ed757fe5b905291905081518155602082015160018201805467ffffffffffffffff19166001604060020a0392909216919091179055604082015181600201908051612f22929160200190613ed2565b50606082015160038201805467ffffffffffffffff19166001604060020a039290921691909117905560808201518160030160086101000a8154816001604060020a0302191690836001604060020a0316021790555060a08201518160030160106101000a8154816001604060020a0302191690836001604060020a0316021790555060c082015160038201805478ff000000000000000000000000000000000000000000000000191660c060020a836002811115612fdd57fe5b02179055505050508092505b50509695505050505050565b6000806000613007600187878761396f565b9250846001604060020a0316866001604060020a031614156130285761252c565b8215156130345761252c565b61303d86612bb5565b915061304885612bb5565b82549091508390101561305a57600080fd5b815483900382558054830181556001604060020a038086169087167feef5653f9c567b23a97bcfb111bfa6b076a95be73d85d161b4c57149c77b48018560405190815260200160405180910390a36130b5600087878661396f565b50505050505050565b8060200151600160a060020a031633600160a060020a031614806130f757508060e00151600160a060020a031633600160a060020a0316145b151561310257600080fd5b50565b6000610ecb8260006040518059106124b25750599080825280602002602001820160405250600080600080612d05565b600080600061314386612bb5565b925060146132778460e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561321157602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116131ce5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561326457fe5b600281111561326f57fe5b905250613995565b1061328157600080fd5b61328a84610ce0565b1561329457600080fd5b6001830154600284018054613321926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561189657600091825260209182902080546001604060020a031684529082028301929091600891018084116118535750505050600388015460009250829150608060020a90046001604060020a031681612d05565b91506133518460006040518059106118df5750599080825280602002602001820160405250600080866000612d05565b905061252c868287612ff5565b600080613369613de5565b60008061337588612bb5565b600281015490945086900360405180591061338d5750595b90808252806020026020018201604052509250600091505b600284015486900382101561341b57600284018054839081106133c457fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03168383815181106133f957fe5b6001604060020a039092166020928302909101909101526001909101906133a5565b6001840154600385015461344b916001604060020a039081169186916000918291608060020a9091041681612d05565b9050613458888289612ff5565b979650505050505050565b600061346d613de5565b60008061347987612bb5565b60028101549094506014901061348e57600080fd5b60028401546001016040518059106134a35750595b90808252806020026020018201604052509250600091505b600284015482101561352e57600284018054839081106134d757fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a031683838151811061350c57fe5b6001604060020a039092166020928302909101909101526001909101906134bb565b6002840154859084908151811061354157fe5b6001604060020a03928316602091820290920101526001850154600386015461357d929182169186916000918291608060020a90041681612d05565b90506130b5878288612ff5565b6000805b8360400151518110156135de57826001604060020a0316846040015182815181106135b557fe5b906020019060200201516001604060020a031614156135d6578091506135e9565b60010161358e565b6001604060020a0391505b5092915050565b6000806135fc85612bb5565b915060146136f28360e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561321157600091825260209182902080546001604060020a031684529082028301929091600891018084116131ce5750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561326457fe5b106136fc57600080fd5b61370583610ce0565b1561370f57600080fd5b600182015460028301805461236b926001604060020a031691906020808202016040519081016040528092919081815260200182805480156137a257602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161375f5790505b5050505050856138d88660e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561387257602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a03168152602001906008019060208260070104928301926001038202915080841161382f5790505b505050918352505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff1660028111156138c557fe5b60028111156138d057fe5b905250613ac0565b6138e06138ff565b6003880154910190608060020a90046001604060020a03166000612d05565b60045490565b60008060028351600281111561391757fe5b1461391e57fe5b8260a001516001604060020a0316151561393b5760019150610d8a565b6139488360a00151612bf9565b9050610d87816101006040519081016040528154909190829060ff166002811115611c1757fe5b8061397d8585808685613b4a565b905061398c8584868685613b4a565b95945050505050565b6000808260a001516001604060020a031615156139b55760009150610d8a565b6139c28360a00151612bb5565b9050613ab68160e06040519081016040529081600082015481526020016001820160009054906101000a90046001604060020a03166001604060020a03166001604060020a031681526020016002820180548060200260200160405190810160405280929190818152602001828054801561321157600091825260209182902080546001604060020a031684529082028301929091600891018084116131ce5750505092845250505060038201546001604060020a038082166020840152604060020a820481166040840152608060020a820416606083015260809091019060c060020a900460ff16600281111561326457fe5b6001019392505050565b6000806000613ad28460200151612bf9565b60038101546001604060020a031693509150600090505b8360400151518110156123c357613b1884604001518281518110613b0957fe5b90602001906020020151612bf9565b60038101549092506001604060020a031683901115613b425760038201546001604060020a031692505b600101613ae9565b600080600080866001604060020a0316886001604060020a031614613b7157610100613b74565b60005b61ffff169250849350613b8688612bb5565b6001810154909250613ba6908a906001604060020a031689898789613c68565b9350600090505b60028201546001604060020a0382161015613c2157613c178983600201836001604060020a0316815481101515613be057fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316898985880160010189613c68565b9350600101613bad565b600382015460006001604060020a039091161115613c5c576003820154613c59908a906001604060020a0316898960ff880189613c68565b93505b50505095945050505050565b80600080613c7588612bf9565b6004810154909150600160a060020a031615801590613c945750600083115b15612fe9578815613d4f576004810154600160a060020a031663d4edf5e5898989898960006040516020015260405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401602060405180830381600087803b1515613d1e57600080fd5b6102c65a03f11515613d2f57600080fd5b505050604051805192505082821115613d4757600080fd5b819250612fe9565b6004810154600160a060020a031663ad1483c3898989898960405160e060020a63ffffffff88160281526001604060020a039586166004820152938516602485015291841660448401529092166064820152608481019190915260a401600060405180830381600087803b1515613dc557600080fd5b6102c65a03f11515613dd657600080fd5b50505050509695505050505050565b60206040519081016040526000815290565b815481835581811511613e2357600502816005028360005260206000209182019101613e239190613f86565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e6957805160ff1916838001178555613e96565b82800160010185558215613e96579182015b82811115613e96578251825591602001919060010190613e7b565b50613ea2929150614011565b5090565b815481835581811511613e2357600402816004028360005260206000209182019101613e23919061402b565b82805482825590600052602060002090600301600490048101928215613f7a5791602002820160005b83821115613f4557835183826101000a8154816001604060020a0302191690836001604060020a031602179055509260200192600801602081600701049283019260010302613efb565b8015613f785782816101000a8154906001604060020a030219169055600801602081600701049283019260010302613f45565b505b50613ea292915061408b565b610d9891905b80821115613ea257805474ffffffffffffffffffffffffffffffffffffffffff191681556000613fbf60018301826140b0565b613fcd6002830160006140b0565b5060038101805470ffffffffffffffffffffffffffffffffff1916905560048101805473ffffffffffffffffffffffffffffffffffffffff19169055600501613f8c565b610d9891905b80821115613ea25760008155600101614017565b610d9891905b80821115613ea257600080825560018201805467ffffffffffffffff1916905561405e60028301826140f4565b5060038101805478ffffffffffffffffffffffffffffffffffffffffffffffffff19169055600401614031565b610d9891905b80821115613ea257805467ffffffffffffffff19168155600101614091565b50805460018160011615610100020316600290046000825580601f106140d65750613102565b601f0160209004906000526020600020908101906131029190614011565b50805460008255600301600490049060005260206000209081019061310291906140115600a165627a7a72305820ee56736790e5c0b3cc993536e5b199cb3e10bb7aa41fa118b3b5edbd7df4c53a0029" +exports.VaultAbi = [{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}] exports.VaultByteCode = "0x" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" -exports._sha256 = "0x5504b905d268eb180b6f677b071573999687d1d9b3bbca60a995b6d76307e3e9" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" +exports._sha256 = "0xf017967d1e357dc62ed9d5ca4d704e0fd8cc6474df08a1cc36549dbe128b0d20" diff --git a/build/LiquidPledgingMock_all.sol b/build/LiquidPledgingMock_all.sol index 96c9d75..53d32b6 100644 --- a/build/LiquidPledgingMock_all.sol +++ b/build/LiquidPledgingMock_all.sol @@ -646,11 +646,13 @@ function donate(uint64 idGiver, uint64 idReceiver) payable { idPledge = normalizePledge(idPledge); Pledge storage n = findPledge(idPledge); + require(n.oldPledge != 0); PledgeAdmin storage m = findAdmin(n.owner); checkAdminOwner(m); - doTransfer(idPledge, n.oldPledge, amount); + uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge); + doTransfer(idPledge, oldPledge, amount); } diff --git a/build/LiquidPledging_all.sol b/build/LiquidPledging_all.sol index bb20d40..c31566d 100644 --- a/build/LiquidPledging_all.sol +++ b/build/LiquidPledging_all.sol @@ -646,11 +646,13 @@ function donate(uint64 idGiver, uint64 idReceiver) payable { idPledge = normalizePledge(idPledge); Pledge storage n = findPledge(idPledge); + require(n.oldPledge != 0); PledgeAdmin storage m = findAdmin(n.owner); checkAdminOwner(m); - doTransfer(idPledge, n.oldPledge, amount); + uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge); + doTransfer(idPledge, oldPledge, amount); } diff --git a/build/Owned.sol.js b/build/Owned.sol.js index 61f3ab3..55f206c 100644 --- a/build/Owned.sol.js +++ b/build/Owned.sol.js @@ -1,6 +1,6 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101d18061003c6000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba5097811461005e5780638da5cb5b14610073578063a6f9dae1146100a2578063d4ee1d90146100c3575b600080fd5b341561006957600080fd5b6100716100f2565b005b341561007e57600080fd5b61008661013f565b604051600160a060020a03909116815260200160405180910390f35b34156100ad57600080fd5b610071600160a060020a036004351661014e565b005b34156100ce57600080fd5b610086610196565b604051600160a060020a03909116815260200160405180910390f35b60015433600160a060020a0390811691161461010d57600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461016957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600154600160a060020a0316815600a165627a7a72305820e68440031004354b3db9d740fb2b8896f5bedd56653beb65edd62e94e414a7ad0029" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" +exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] +exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101bc8061003b6000396000f3006060604052600436106100615763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba509781146100665780638da5cb5b1461007b578063a6f9dae1146100aa578063d4ee1d90146100c9575b600080fd5b341561007157600080fd5b6100796100dc565b005b341561008657600080fd5b61008e610128565b604051600160a060020a03909116815260200160405180910390f35b34156100b557600080fd5b610079600160a060020a0360043516610137565b34156100d457600080fd5b61008e610181565b60015433600160a060020a039081169116146100f757600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461015257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316815600a165627a7a7230582093915e2078cf23efe265b372c026c6cbc79ddd13f04e6e31d52efe53c70380790029" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" exports._sha256 = "0xf61824cbb7f4765beceba9899e284825b9c60abba4179558d6b40e6976076b6b" diff --git a/build/Vault.sol.js b/build/Vault.sol.js index 54d8914..5a7ef82 100644 --- a/build/Vault.sol.js +++ b/build/Vault.sol.js @@ -1,10 +1,10 @@ /* This is an autogenerated file. DO NOT EDIT MANUALLY */ -exports.LiquidPledgingAbi = [{"constant":false,"inputs":[{"name":"idNote","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"idNote","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"}] +exports.LiquidPledgingAbi = [{"constant":false,"inputs":[{"name":"idNote","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idNote","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] exports.LiquidPledgingByteCode = "0x" -exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}] -exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101d18061003c6000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba5097811461005e5780638da5cb5b14610073578063a6f9dae1146100a2578063d4ee1d90146100c3575b600080fd5b341561006957600080fd5b6100716100f2565b005b341561007e57600080fd5b61008661013f565b604051600160a060020a03909116815260200160405180910390f35b34156100ad57600080fd5b610071600160a060020a036004351661014e565b005b34156100ce57600080fd5b610086610196565b604051600160a060020a03909116815260200160405180910390f35b60015433600160a060020a0390811691161461010d57600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461016957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600154600160a060020a0316815600a165627a7a723058206a8fea8a6be1bef5d767c60630c0553a5c81aea6d4751c10e110a74f895c33830029" -exports.VaultAbi = [{"constant":true,"inputs":[],"name":"nPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"liquidPledging","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"payments","outputs":[{"name":"state","type":"uint8"},{"name":"ref","type":"bytes32"},{"name":"dest","type":"address"},{"name":"amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_automatic","type":"bool"}],"name":"setAutopay","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayments","type":"uint256[]"}],"name":"multiCancel","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"autoPay","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"VaultMock","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newLiquidPledging","type":"address"}],"name":"setLiquidPledging","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayments","type":"uint256[]"}],"name":"multiConfirm","outputs":[],"payable":false,"type":"function"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"}],"name":"ConfirmPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"}],"name":"CancelPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"},{"indexed":true,"name":"ref","type":"bytes32"},{"indexed":true,"name":"dest","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"AuthorizePayment","type":"event"}] -exports.VaultByteCode = "0x60606040525b60008054600160a060020a03191633600160a060020a03161790555b5b610b0e806100316000396000f300606060405236156100ca5763ffffffff60e060020a6000350416633baf35fb81146100ce57806374041d1f146100f357806379ba5097146101225780638422927d14610137578063876ca09f1461014f57806387d81789146101675780638da5cb5b146101c5578063a4500c33146101f4578063a6f9dae11461020e578063b796105c1461022f578063bb4f28df14610280578063bbc32820146102b7578063cd6b8caf146102de578063d4ee1d90146102f3578063e99996b114610322578063ffd82d2114610343575b5b5b005b34156100d957600080fd5b6100e1610394565b60405190815260200160405180910390f35b34156100fe57600080fd5b61010661039b565b604051600160a060020a03909116815260200160405180910390f35b341561012d57600080fd5b6100ca6103aa565b005b341561014257600080fd5b6100ca6004356103f7565b005b341561015a57600080fd5b6100ca600435610420565b005b341561017257600080fd5b61017d600435610449565b6040518085600281111561018d57fe5b60ff168152602081019490945250600160a060020a039091166040808401919091526060830191909152608090910191505180910390f35b34156101d057600080fd5b610106610490565b604051600160a060020a03909116815260200160405180910390f35b34156101ff57600080fd5b6100ca600435151561049f565b005b341561021957600080fd5b6100ca600160a060020a03600435166104f8565b005b341561023a57600080fd5b6100ca600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061054095505050505050565b005b341561028b57600080fd5b6100e1600435600160a060020a0360243516604435610596565b60405190815260200160405180910390f35b34156102c257600080fd5b6102ca61071f565b604051901515815260200160405180910390f35b34156102e957600080fd5b6100ca6103f5565b005b34156102fe57600080fd5b610106610743565b604051600160a060020a03909116815260200160405180910390f35b341561032d57600080fd5b6100ca600160a060020a0360043516610752565b005b341561034e57600080fd5b6100ca60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506107b095505050505050565b005b6003545b90565b600254600160a060020a031681565b60015433600160a060020a039081169116146103c557600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60005433600160a060020a0390811691161461041257600080fd5b61041b81610806565b5b5b50565b60005433600160a060020a0390811691161461043b57600080fd5b61041b81610914565b5b5b50565b600380548290811061045757fe5b906000526020600020906004020160005b5080546001820154600283015460039093015460ff909216935091600160a060020a03169084565b600054600160a060020a031681565b60005433600160a060020a039081169116146104ba57600080fd5b6002805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000831515021790555b5b50565b60005433600160a060020a0390811691161461051357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6000805433600160a060020a0390811691161461055c57600080fd5b5060005b81518110156105905761058782828151811061057857fe5b90602001906020020151610806565b5b600101610560565b5b5b5050565b600254600090819033600160a060020a039081169116146105b657600080fd5b50600380549081906105cb9060018301610a5e565b5060006003828154811015156105dd57fe5b906000526020600020906004020160005b50805460ff1916600183600281111561060357fe5b02179055508460038281548110151561061857fe5b906000526020600020906004020160005b5060010155600380548591908390811061063f57fe5b906000526020600020906004020160005b50600201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600380548491908390811061069057fe5b906000526020600020906004020160005b5060030155600160a060020a03841685827fb025fbd648b47675e5160bb9a938180cda38f285280e390d3aac0c3c0002ba088660405190815260200160405180910390a460025474010000000000000000000000000000000000000000900460ff16156107115761071181610914565b5b8091505b5b509392505050565b60025474010000000000000000000000000000000000000000900460ff1681565b5b565b600154600160a060020a031681565b60005433600160a060020a0390811691161461076d57600080fd5b600254600160a060020a03161561078357600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6000805433600160a060020a039081169116146107cc57600080fd5b5060005b8151811015610590576107f78282815181106107e857fe5b90602001906020020151610914565b5b6001016107d0565b5b5b5050565b600354600090821061081757600080fd5b600380548390811061082557fe5b906000526020600020906004020160005b50905060005b815460ff16600281111561084c57fe5b1461085657600080fd5b8054600290829060ff19166001835b021790555060025460018201546003830154600160a060020a039092169163e9c211e2919060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15156108ce57600080fd5b6102c65a03f115156108df57600080fd5b505050817ff1a1a3c38f42dc56b083903c7f8fb342b64c15e710c3a4179a4ba5c36733e91d60405160405180910390a25b5050565b600354600090821061092557600080fd5b600380548390811061093357fe5b906000526020600020906004020160005b50905060005b815460ff16600281111561095a57fe5b1461096457600080fd5b8054600190829060ff191682805b021790555060028101546003820154600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505015156109b457600080fd5b60025460018201546003830154600160a060020a0390921691632ee88808919060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1515610a1857600080fd5b6102c65a03f11515610a2957600080fd5b505050817fe46ac4851953c525120fe90499f529bf6236f067292c975d33ad0afb2c585be660405160405180910390a25b5050565b815481835581811511610a8a57600402816004028360005260206000209182019101610a8a9190610a90565b5b505050565b61039891905b80821115610adb57805460ff1916815560006001820181905560028201805473ffffffffffffffffffffffffffffffffffffffff191690556003820155600401610a96565b5090565b905600a165627a7a7230582089d4f70c572dccc9382e705b36c8488331b5d5488a6793173458a9da9f0cb0c80029" -exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang" +exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] +exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101bc8061003b6000396000f3006060604052600436106100615763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba509781146100665780638da5cb5b1461007b578063a6f9dae1146100aa578063d4ee1d90146100c9575b600080fd5b341561007157600080fd5b6100796100dc565b005b341561008657600080fd5b61008e610128565b604051600160a060020a03909116815260200160405180910390f35b34156100b557600080fd5b610079600160a060020a0360043516610137565b34156100d457600080fd5b61008e610181565b60015433600160a060020a039081169116146100f757600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461015257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316815600a165627a7a72305820885574d1a0e8ce290bfa7a88060f12652b15d02606bfe818c0778bcfe49198070029" +exports.VaultAbi = [{"constant":true,"inputs":[],"name":"nPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidPledging","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"confirmPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"payments","outputs":[{"name":"state","type":"uint8"},{"name":"ref","type":"bytes32"},{"name":"dest","type":"address"},{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_automatic","type":"bool"}],"name":"setAutopay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idPayments","type":"uint256[]"}],"name":"multiCancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ref","type":"bytes32"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"authorizePayment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"autoPay","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"VaultMock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newLiquidPledging","type":"address"}],"name":"setLiquidPledging","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idPayments","type":"uint256[]"}],"name":"multiConfirm","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"}],"name":"ConfirmPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"}],"name":"CancelPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"},{"indexed":true,"name":"ref","type":"bytes32"},{"indexed":true,"name":"dest","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"AuthorizePayment","type":"event"}] +exports.VaultByteCode = "0x606060405260008054600160a060020a033316600160a060020a0319909116179055610a68806100306000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633baf35fb81146100ce57806374041d1f146100f357806379ba5097146101225780638422927d14610135578063876ca09f1461014b57806387d81789146101615780638da5cb5b146101bf578063a4500c33146101d2578063a6f9dae1146101ea578063b796105c14610209578063bb4f28df14610258578063bbc328201461027d578063cd6b8caf146102a4578063d4ee1d90146102b7578063e99996b1146102ca578063ffd82d21146102e9575b005b34156100d957600080fd5b6100e1610338565b60405190815260200160405180910390f35b34156100fe57600080fd5b61010661033f565b604051600160a060020a03909116815260200160405180910390f35b341561012d57600080fd5b6100cc61034e565b341561014057600080fd5b6100cc60043561039a565b341561015657600080fd5b6100cc6004356103c1565b341561016c57600080fd5b6101776004356103e5565b6040518085600281111561018757fe5b60ff168152602081019490945250600160a060020a039091166040808401919091526060830191909152608090910191505180910390f35b34156101ca57600080fd5b61010661042a565b34156101dd57600080fd5b6100cc6004351515610439565b34156101f557600080fd5b6100cc600160a060020a0360043516610494565b341561021457600080fd5b6100cc60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506104de95505050505050565b341561026357600080fd5b6100e1600435600160a060020a0360243516604435610531565b341561028857600080fd5b6102906106a2565b604051901515815260200160405180910390f35b34156102af57600080fd5b6100cc6106c3565b34156102c257600080fd5b6101066106c5565b34156102d557600080fd5b6100cc600160a060020a03600435166106d4565b34156102f457600080fd5b6100cc600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061073495505050505050565b6003545b90565b600254600160a060020a031681565b60015433600160a060020a0390811691161461036957600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b60005433600160a060020a039081169116146103b557600080fd5b6103be81610783565b50565b60005433600160a060020a039081169116146103dc57600080fd5b6103be81610881565b60038054829081106103f357fe5b6000918252602090912060049091020180546001820154600283015460039093015460ff909216935091600160a060020a03169084565b600054600160a060020a031681565b60005433600160a060020a0390811691161461045457600080fd5b60028054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b60005433600160a060020a039081169116146104af57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a039081169116146104fa57600080fd5b5060005b815181101561052d5761052582828151811061051657fe5b90602001906020020151610783565b6001016104fe565b5050565b600254600090819033600160a060020a0390811691161461055157600080fd5b506003805490819061056690600183016109bc565b50600060038281548110151561057857fe5b60009182526020909120600490910201805460ff1916600183600281111561059c57fe5b0217905550846003828154811015156105b157fe5b600091825260209091206001600490920201015560038054859190839081106105d657fe5b906000526020600020906004020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055508260038281548110151561061b57fe5b6000918252602090912060036004909202010155600160a060020a03841685827fb025fbd648b47675e5160bb9a938180cda38f285280e390d3aac0c3c0002ba088660405190815260200160405180910390a460025474010000000000000000000000000000000000000000900460ff161561069a5761069a81610881565b949350505050565b60025474010000000000000000000000000000000000000000900460ff1681565b565b600154600160a060020a031681565b60005433600160a060020a039081169116146106ef57600080fd5b600254600160a060020a03161561070557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461075057600080fd5b5060005b815181101561052d5761077b82828151811061076c57fe5b90602001906020020151610881565b600101610754565b600354600090821061079457600080fd5b60038054839081106107a257fe5b6000918252602082206004909102019150815460ff1660028111156107c357fe5b146107cd57600080fd5b805460ff1916600290811782555460018201546003830154600160a060020a039092169163e9c211e2919060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b151561083c57600080fd5b6102c65a03f1151561084d57600080fd5b505050817ff1a1a3c38f42dc56b083903c7f8fb342b64c15e710c3a4179a4ba5c36733e91d60405160405180910390a25050565b600354600090821061089257600080fd5b60038054839081106108a057fe5b6000918252602082206004909102019150815460ff1660028111156108c157fe5b146108cb57600080fd5b805460ff1916600117815560028101546003820154600160a060020a03909116906108fc81150290604051600060405180830381858888f19350505050151561091357600080fd5b60025460018201546003830154600160a060020a0390921691632ee88808919060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b151561097757600080fd5b6102c65a03f1151561098857600080fd5b505050817fe46ac4851953c525120fe90499f529bf6236f067292c975d33ad0afb2c585be660405160405180910390a25050565b8154818355818115116109e8576004028160040283600052602060002091820191016109e891906109ed565b505050565b61033c91905b80821115610a3857805460ff1916815560006001820181905560028201805473ffffffffffffffffffffffffffffffffffffffff1916905560038201556004016109f3565b50905600a165627a7a72305820aff4581a87d38cad743a6d7ee5d05b3093a02b882cdfd5a325adf857ea35deec0029" +exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" exports._sha256 = "0x55fb3ff315e3297664118d0d8d4eefb81be1c0f350996fb5657a68a41491d8be" diff --git a/contracts/LiquidPledging.sol b/contracts/LiquidPledging.sol index bf85dc2..4c99078 100644 --- a/contracts/LiquidPledging.sol +++ b/contracts/LiquidPledging.sol @@ -179,9 +179,6 @@ contract LiquidPledging is LiquidPledgingBase { require(n.paymentState == PaymentState.Paying); - // Check the project is not canceled in the while. - require(getOldestPledgeNotCanceled(idPledge) == idPledge); - uint64 idNewPledge = findOrCreatePledge( n.owner, n.delegationChain, @@ -232,11 +229,13 @@ contract LiquidPledging is LiquidPledgingBase { idPledge = normalizePledge(idPledge); Pledge storage n = findPledge(idPledge); + require(n.oldPledge != 0); PledgeAdmin storage m = findAdmin(n.owner); checkAdminOwner(m); - doTransfer(idPledge, n.oldPledge, amount); + uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge); + doTransfer(idPledge, oldPledge, amount); } @@ -283,11 +282,9 @@ contract LiquidPledging is LiquidPledgingBase { } } - function mNormalizePledge(uint[] pledges) returns(uint64) { + function mNormalizePledge(uint64[] pledges) { for (uint i = 0; i < pledges.length; i++ ) { - uint64 idPledge = uint64( pledges[i] & (D64-1) ); - - normalizePledge(idPledge); + normalizePledge( pledges[i] ); } } diff --git a/contracts/LiquidPledgingBase.sol b/contracts/LiquidPledgingBase.sol index 8c79ece..b3630aa 100644 --- a/contracts/LiquidPledgingBase.sol +++ b/contracts/LiquidPledgingBase.sol @@ -1,6 +1,7 @@ pragma solidity ^0.4.11; import "./ILiquidPledgingPlugin.sol"; +import "../node_modules/giveth-common-contracts/contracts/Owned.sol"; /// @dev This is declares a few functions from `Vault` so that the /// `LiquidPledgingBase` contract can interface with the `Vault` contract @@ -9,7 +10,7 @@ contract Vault { function () payable; } -contract LiquidPledgingBase { +contract LiquidPledgingBase is Owned { // Limits inserted to prevent large loops that could prevent canceling uint constant MAX_DELEGATES = 20; uint constant MAX_SUBPROJECT_LEVEL = 20; @@ -47,6 +48,9 @@ contract LiquidPledgingBase { // this mapping allows you to search for a specific pledge's index number by the hash of that pledge mapping (bytes32 => uint64) hPledge2idx;//TODO Fix typo + mapping (bytes32 => bool) pluginWhitelist; + + bool public usePluginWhitelist = true; ///// @@ -73,12 +77,13 @@ contract LiquidPledgingBase { /////// -// Adminss functions +// Admin functions ////// /// @notice Creates a giver. function addGiver(string name, string url, uint64 commitTime, ILiquidPledgingPlugin plugin ) returns (uint64 idGiver) { + require(isValidPlugin(plugin)); idGiver = uint64(admins.length); @@ -119,6 +124,7 @@ contract LiquidPledgingBase { /// @notice Creates a new Delegate function addDelegate(string name, string url, uint64 commitTime, ILiquidPledgingPlugin plugin) returns (uint64 idDelegate) { //TODO return index number + require(isValidPlugin(plugin)); idDelegate = uint64(admins.length); @@ -158,6 +164,8 @@ contract LiquidPledgingBase { /// @notice Creates a new Project function addProject(string name, string url, address projectAdmin, uint64 parentProject, uint64 commitTime, ILiquidPledgingPlugin plugin) returns (uint64 idProject) { + require(isValidPlugin(plugin)); + if (parentProject != 0) { PledgeAdmin storage pa = findAdmin(parentProject); require(pa.adminType == PledgeAdminType.Project); @@ -373,4 +381,46 @@ contract LiquidPledgingBase { function checkAdminOwner(PledgeAdmin m) internal constant { require((msg.sender == m.addr) || (msg.sender == address(m.plugin))); } + +//////// +// Plugin Whitelist Methods +/////// + + function addValidPlugin(bytes32 contractHash) external onlyOwner { + pluginWhitelist[contractHash] = true; + } + + function removeValidPlugin(bytes32 contractHash) external onlyOwner { + pluginWhitelist[contractHash] = false; + } + + function useWhitelist(bool useWhitelist) external onlyOwner { + usePluginWhitelist = useWhitelist; + } + + function isValidPlugin(address addr) public returns(bool) { + if (!usePluginWhitelist || addr == 0x0) return true; + + bytes32 contractHash = getCodeHash(addr); + + return pluginWhitelist[contractHash]; + } + + function getCodeHash(address addr) public returns(bytes32) { + bytes memory o_code; + assembly { + // retrieve the size of the code, this needs assembly + let size := extcodesize(addr) + // allocate output byte array - this could also be done without assembly + // by using o_code = new bytes(size) + o_code := mload(0x40) + // new "memory end" including padding + mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) + // store length in memory + mstore(o_code, size) + // actually retrieve the code, this needs assembly + extcodecopy(addr, add(o_code, 0x20), 0, size) + } + return keccak256(o_code); + } } diff --git a/contracts/Vault.sol b/contracts/Vault.sol index 1f1fe88..2901178 100644 --- a/contracts/Vault.sol +++ b/contracts/Vault.sol @@ -92,10 +92,10 @@ contract Vault is Owned { require(p.state == PaymentStatus.Pending); p.state = PaymentStatus.Paid; - p.dest.transfer(p.amount); // only ETH denominated in wei - liquidPledging.confirmPayment(uint64(p.ref), p.amount); + p.dest.transfer(p.amount); // only ETH denominated in wei + ConfirmPayment(_idPayment); } diff --git a/contracts/test/TestSimpleProjectPlugin.sol b/contracts/test/TestSimpleProjectPlugin.sol new file mode 100644 index 0000000..2ab4c67 --- /dev/null +++ b/contracts/test/TestSimpleProjectPlugin.sol @@ -0,0 +1,52 @@ +pragma solidity ^0.4.11; + +import "../LiquidPledging.sol"; + +// simple liquidPledging plugin contract for testing whitelist +contract TestSimpleProjectPlugin { + + uint64 public idProject; + bool initPending; + + event BeforeTransfer(uint64 pledgeAdmin, uint64 pledgeFrom, uint64 pledgeTo, uint64 context, uint amount); + event AfterTransfer(uint64 pledgeAdmin, uint64 pledgeFrom, uint64 pledgeTo, uint64 context, uint amount); + + function TestSimpleProjectPlugin() { + require(msg.sender != tx.origin); // Avoids being created directly by mistake. + initPending = true; + } + + function init( + LiquidPledging liquidPledging, + string name, + string url, + uint64 parentProject + ) { + require(initPending); + idProject = liquidPledging.addProject(name, url, address(this), parentProject, 0, ILiquidPledgingPlugin(this)); + initPending = false; + } + + function beforeTransfer( + uint64 pledgeAdmin, + uint64 pledgeFrom, + uint64 pledgeTo, + uint64 context, + uint amount + ) external returns (uint maxAllowed) { + require(!initPending); + BeforeTransfer(pledgeAdmin, pledgeFrom, pledgeTo, context, amount); + } + + function afterTransfer( + uint64 pledgeAdmin, + uint64 pledgeFrom, + uint64 pledgeTo, + uint64 context, + uint amount + ) external { + require(!initPending); + AfterTransfer(pledgeAdmin, pledgeFrom, pledgeTo, context, amount); + } + +} diff --git a/contracts/test/TestSimpleProjectPluginFactory.sol b/contracts/test/TestSimpleProjectPluginFactory.sol new file mode 100644 index 0000000..390b5d9 --- /dev/null +++ b/contracts/test/TestSimpleProjectPluginFactory.sol @@ -0,0 +1,19 @@ +pragma solidity ^0.4.11; + +import "./TestSimpleProjectPlugin.sol"; +import "../LiquidPledging.sol"; + +// simple factory for deploying TestSimpleProjectPlugin.sol contract +contract TestSimpleProjectPluginFactory { + + function deploy( + LiquidPledging liquidPledging, + string name, + string url, + uint64 parentProject + ) { + TestSimpleProjectPlugin p = new TestSimpleProjectPlugin(); + p.init(liquidPledging, name, url, parentProject); + } + +} diff --git a/index.js b/index.js index fab5774..b8e9dbb 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ - -exports.LiquidPledging = require('./js/liquidPledging.js'); -exports.LiquidPledgingMock = require('./js/liquidPledgingMock.js'); -exports.LiquidPledgingState = require('./js/liquidPledgingState.js'); -exports.Vault = require('./js/vault.js'); +exports.LiquidPledging = require('./lib/liquidPledging.js'); +exports.LiquidPledgingMock = require('./lib/liquidPledgingMock.js'); +exports.LiquidPledgingState = require('./lib/liquidPledgingState.js'); +exports.Vault = require('./lib/vault.js'); diff --git a/package.json b/package.json index 6d324be..548efab 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,15 @@ "description": "Liquid Pledging Smart Contract", "main": "index.js", "directories": { + "lib": "lib", "test": "test" }, "scripts": { - "build": "solcpiler", - "test": "solcpiler; mocha --harmony" + "test": "npm run build; mocha --harmony", + "sol-compile": "solcpiler -i './contracts/**/*.sol'", + "js-compile": "babel -d lib/ js/", + "build": "npm run sol-compile; npm run js-compile", + "prepublish": "npm run js-compile" }, "repository": { "type": "git", @@ -29,7 +33,9 @@ "url": "https://github.com/Giveth/liquidpledging/issues" }, "devDependencies": { + "babel-cli": "^6.26.0", "babel-eslint": "^7.2.3", + "babel-preset-env": "^1.6.0", "eslint-config-airbnb": "^15.0.1", "eslint-plugin-import": "^2.6.0", "eslint-plugin-jsx-a11y": "^6.0.2", @@ -38,13 +44,14 @@ "lerna": "^2.2.0", "random-bytes": "^1.0.0", "mocha": "^3.5.0", - "solcpiler": "0.0.4", - "web3": "git://github.com/perissology/web3.js.git#all_fixes", - "chai": "^4.1.0" + "solcpiler": "0.0.7", + "web3": "1.0.0-beta.24" }, "homepage": "https://github.com/Giveth/liquidpledging#readme", "dependencies": { "async": "^2.4.0", - "eth-contract-class": "0.0.4" + "chai": "^4.1.0", + "eth-contract-class": "0.0.6", + "giveth-common-contracts": "^0.4.0" } } diff --git a/readme-header.png b/readme-header.png new file mode 100755 index 0000000..c27eec8 Binary files /dev/null and b/readme-header.png differ diff --git a/test/AdminPlugins.js b/test/AdminPlugins.js new file mode 100644 index 0000000..20ff4f3 --- /dev/null +++ b/test/AdminPlugins.js @@ -0,0 +1,117 @@ +/* eslint-env mocha */ +/* eslint-disable no-await-in-loop */ +const TestRPC = require('ethereumjs-testrpc'); +const Web3 = require('web3'); +const chai = require('chai'); +const liquidpledging = require('../index.js'); +const assertFail = require('./helpers/assertFail'); + +const LiquidPledging = liquidpledging.LiquidPledgingMock; +const LiquidPledgingState = liquidpledging.LiquidPledgingState; +const simpleProjectPluginFactoryAbi = require('../build/TestSimpleProjectPluginFactory.sol').TestSimpleProjectPluginFactoryAbi; +const simpleProjectPluginFactoryByteCode = require('../build/TestSimpleProjectPluginFactory.sol').TestSimpleProjectPluginFactoryByteCode; +const simpleProjectPluginRuntimeByteCode = require('../build/TestSimpleProjectPluginFactory.sol').TestSimpleProjectPluginRuntimeByteCode; +const Vault = liquidpledging.Vault; +const assert = chai.assert; + +const printState = async (liquidPledgingState) => { + const st = await liquidPledgingState.getState(); + console.log(JSON.stringify(st, null, 2)); +}; + +describe('LiquidPledging plugins test', function () { + this.timeout(0); + + let testrpc; + let web3; + let accounts; + let liquidPledging; + let liquidPledgingState; + let vault; + let giver1; + let adminProject1; + let adminDelegate1; + + before(async () => { + testrpc = TestRPC.server({ + ws: true, + gasLimit: 6500000, + total_accounts: 10, + }); + + testrpc.listen(8546, '127.0.0.1'); + + web3 = new Web3('ws://localhost:8546'); + accounts = await web3.eth.getAccounts(); + giver1 = accounts[ 1 ]; + adminProject1 = accounts[ 2 ]; + adminDelegate1 = accounts[ 3 ]; + }); + + after((done) => { + testrpc.close(); + done(); + }); + + it('Should deploy LiquidPledging contract', async function() { + vault = await Vault.new(web3); + liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 6500000 }); + await vault.setLiquidPledging(liquidPledging.$address); + liquidPledgingState = new LiquidPledgingState(liquidPledging); + }); + + it('Should create create giver with no plugin', async function() { + await liquidPledging.addGiver('Giver1', '', 0, '0x0', { from: adminProject1 }); + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 1); + }); + + it('Should fail to create giver with invalid plugin', async function() { + await assertFail(async () => { + await liquidPledging.addGiver('Giver2', '', 0, vault.$address, { from: giver1 }); + }); + }); + + it('Should fail to create delegate with invalid plugin', async function() { + await assertFail(async () => { + await liquidPledging.addDelegate('delegate1', '', 0, liquidPledging.$address, { from: adminDelegate1}); + }); + }); + + it('Should fail to create project with invalid plugin', async function() { + await assertFail(async () => { + await liquidPledging.addProject('Project1', '', giver1, 0, 0, vault.$address, { from: adminProject1}); + }); + }); + + it('Should deploy TestSimpleProjectPlugin and add project', async function() { + // add plugin as valid plugin + const codeHash = web3.utils.soliditySha3(simpleProjectPluginRuntimeByteCode); + await liquidPledging.addValidPlugin(codeHash); + + // deploy new plugin + const factoryContract = await new web3.eth.Contract(simpleProjectPluginFactoryAbi) + .deploy({ + data: simpleProjectPluginFactoryByteCode, + arguments: [] + }).send({ from: adminProject1, gas: 5000000 }); + + await factoryContract.methods + .deploy(liquidPledging.$address, "SimplePlugin1", "", 0) + .send({ from: adminProject1, gas: 4000000 }); + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 2); + }); + + it('Should allow all plugins', async function() { + await liquidPledging.useWhitelist(false, { gas: 100000 }); + + await liquidPledging.addGiver('Giver2', '', 0, vault.$address, { from: giver1, gas: 200000 }); + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 3); + }); +}); + diff --git a/test/CancelPledge.js b/test/CancelPledge.js new file mode 100644 index 0000000..d4d1bad --- /dev/null +++ b/test/CancelPledge.js @@ -0,0 +1,89 @@ +/* eslint-env mocha */ +/* eslint-disable no-await-in-loop */ +const TestRPC = require('ethereumjs-testrpc'); +const Web3 = require('web3'); +const chai = require('chai'); +const liquidpledging = require('../index.js'); +const assertFail = require('./helpers/assertFail'); + +const LiquidPledging = liquidpledging.LiquidPledgingMock; +const LiquidPledgingState = liquidpledging.LiquidPledgingState; +const Vault = liquidpledging.Vault; +const assert = chai.assert; + +const printState = async (liquidPledgingState) => { + const st = await liquidPledgingState.getState(); + console.log(JSON.stringify(st, null, 2)); +}; + +describe('LiquidPledging cancelPledge normal scenario', function () { + this.timeout(0); + + let testrpc; + let web3; + let accounts; + let liquidPledging; + let liquidPledgingState; + let vault; + let giver1; + let adminProject1; + let adminProject2; + + before(async () => { + testrpc = TestRPC.server({ + ws: true, + gasLimit: 5800000, + total_accounts: 10, + }); + + testrpc.listen(8546, '127.0.0.1'); + + web3 = new Web3('ws://localhost:8546'); + accounts = await web3.eth.getAccounts(); + giver1 = accounts[ 1 ]; + adminProject1 = accounts[ 2 ]; + adminProject2 = accounts[ 3 ]; + }); + + after((done) => { + testrpc.close(); + done(); + }); + + it('Should deploy LiquidPledging contract', async () => { + vault = await Vault.new(web3); + liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 }); + await vault.setLiquidPledging(liquidPledging.$address); + liquidPledgingState = new LiquidPledgingState(liquidPledging); + }); + + it('Should add project and donate ', async () => { + await liquidPledging.addProject('Project1', 'URLProject1', adminProject1, 0, 0, '0x0', { from: adminProject1 }); + await liquidPledging.donate(0, 1, { from: giver1, value: '1000', gas: 500000 }); + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 2); + }); + + it('Should only allow pledge owner to cancel pledge', async () => { + await assertFail(async () => { + await liquidPledging.cancelPledge(2, 1000, { from: giver1, gas: 500000 }); + }); + }); + + it('Should cancel pledge and return to oldPledge', async () => { + await liquidPledging.cancelPledge(2, 1000, { from: adminProject1, gas: 500000 }); + + const st = await liquidPledgingState.getState(); + + assert.equal(st.pledges[1].amount, 1000); + assert.equal(st.pledges[2].amount, 0); + }); + + it('Should not allow to cancel pledge if oldPledge === 0', async () => { + await assertFail(async () => { + await liquidPledging.cancelPledge(1, 1000, { from: giver1, gas: 500000 }); + }); + }) +}); + diff --git a/test/DelegationChain.js b/test/DelegationChain.js new file mode 100644 index 0000000..9030942 --- /dev/null +++ b/test/DelegationChain.js @@ -0,0 +1,182 @@ +/* eslint-env mocha */ +/* eslint-disable no-await-in-loop */ +const TestRPC = require('ethereumjs-testrpc'); +const Web3 = require('web3'); +const chai = require('chai'); +const liquidpledging = require('../index.js'); + +const LiquidPledging = liquidpledging.LiquidPledgingMock; +const LiquidPledgingState = liquidpledging.LiquidPledgingState; +const Vault = liquidpledging.Vault; +const assertFail = require('./helpers/assertFail'); +const assert = chai.assert; + +const printState = async (liquidPledgingState) => { + const st = await liquidPledgingState.getState(); + console.log(JSON.stringify(st, null, 2)); +}; + +describe('DelegationChain test', function () { + this.timeout(0); + + let testrpc; + let web3; + let accounts; + let liquidPledging; + let liquidPledgingState; + let vault; + let giver1; + let giver2; + let delegate1; + let delegate2; + let delegate3; + let adminProject1; + + before(async () => { + testrpc = TestRPC.server({ + ws: true, + gasLimit: 5800000, + total_accounts: 10, + }); + + testrpc.listen(8546, '127.0.0.1'); + + web3 = new Web3('ws://localhost:8546'); + accounts = await web3.eth.getAccounts(); + giver1 = accounts[1]; + delegate1 = accounts[2]; + delegate2 = accounts[3]; + delegate3 = accounts[4]; + adminProject1 = accounts[5]; + giver2 = accounts[6]; + }); + + after((done) => { + testrpc.close(); + done(); + }); + + it('Should deploy LiquidPledging contract', async () => { + vault = await Vault.new(web3); + liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 }); + await vault.setLiquidPledging(liquidPledging.$address); + liquidPledgingState = new LiquidPledgingState(liquidPledging); + }); + + it('Should add pledgeAdmins', async () => { + await liquidPledging.addGiver('Giver1', 'URLGiver1', 86400, 0, { from: giver1 }); // pledgeAdmin 1 + await liquidPledging.addDelegate('Delegate1', 'URLDelegate1', 259200, 0, { from: delegate1 }); // pledgeAdmin 2 + await liquidPledging.addDelegate('Delegate2', 'URLDelegate2', 0, 0, { from: delegate2 }); // pledgeAdmin 3 + await liquidPledging.addDelegate('Delegate3', 'URLDelegate3', 0, 0, { from: delegate3 }); // pledgeAdmin 4 + await liquidPledging.addProject('Project1', 'URLProject1', adminProject1, 0, 0, 0, { from: adminProject1 }); // pledgeAdmin 5 + await liquidPledging.addGiver('Giver2', 'URLGiver2', 0, 0, { from: giver2 }); // pledgeAdmin 6 + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 6); + }); + + it('Should allow previous delegate to transfer pledge', async () => { + await liquidPledging.donate(1, 2, {from: giver1, value: 1000, $extraGas: 50000}); + // add delegate2 to chain + await liquidPledging.transfer(2, 2, 1000, 3, {from: delegate1, $extraGas: 100000}); + // delegate 1 transfer pledge back to self, thus undelegating delegate2 + await liquidPledging.transfer(2, 3, 1000, 2, {from: delegate1, $extraGas: 100000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges[2].amount, 1000); + assert.equal(st.pledges[3].amount, 0); + }); + + it('Should allow any delegate in chain to transfer pledge and undelegate all delegates occurring later in chain', async () => { + // add delegate2 to chain + await liquidPledging.transfer(2, 2, 1000, 3, {from: delegate1, $extraGas: 100000}); + // add delegate3 to chain + await liquidPledging.transfer(3, 3, 1000, 4, {from: delegate2, $extraGas: 100000}); + // delegate 1 transfer pledge to project1. should also undelegate all delegates occurring later in chain + await liquidPledging.transfer(2, 4, 1000, 5, {from: delegate1, $extraGas: 200000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges[5].amount, 1000); + assert.equal(st.pledges[5].intendedProject, 5); + assert.equal(st.pledges[5].delegates.length, 1); + assert.equal(st.pledges[5].delegates[0].id, 2); + assert.equal(st.pledges[3].amount, 0); + assert.equal(st.pledges[4].amount, 0); + }); + + it('Should throw if delegate2 is not in delegationChain', async () => { + await assertFail(async () => await liquidPledging.transfer(3, 5, 1000, 1, {from: delegate2})); + }); + + it('Delegate1 should not be able to transfer to another giver', async () => { + await assertFail(async () => await liquidPledging.transfer(2, 5, 1000, 6, {from: delegate1})); + }); + + it('Delegate1 should be able to transfer pledge back to owner', async () => { + await liquidPledging.transfer(2, 5, 1000, 1, {from: delegate1, $extraGas: 100000}); + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges[1].amount, 1000); + assert.equal(st.pledges[1].delegates.length, 0); + assert.equal(st.pledges[5].amount, 0); + }); + + it('Delegate1 should be able to change delegation', async () => { + // add delegate1 to chain + await liquidPledging.transfer(1, 1, 1000, 2, {from: giver1, $extraGas: 100000}); + // delegate1 add delegate2 to chain + await liquidPledging.transfer(2, 2, 1000, 3, {from: delegate1, $extraGas: 100000}); + // delegate1 remove delegate2 and add delegate3 to chain + await liquidPledging.transfer(2, 3, 1000, 4, {from: delegate1, $extraGas: 100000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges[1].amount, 0); + assert.equal(st.pledges[6].amount, 1000); + assert.equal(st.pledges[6].delegates.length, 2); + assert.equal(st.pledges[6].delegates[0].id, 2); + assert.equal(st.pledges[6].delegates[1].id, 4); + }); + + it('delegate in chain should be able to delegate to previous delegate, thus undelegating themselves and any delegate after the previous delegate', async () => { + // add delegate2 to chain + await liquidPledging.transfer(4, 6, 1000, 3, {from: delegate3, $extraGas: 100000}); + // delegate2 transfer back to delegate1, thus undelegating delegate2 & delegate3 + await liquidPledging.transfer(3, 7, 1000, 2, {from: delegate2, $extraGas: 100000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges[7].amount, 0); + assert.equal(st.pledges[2].amount, 1000); + assert.equal(st.pledges[2].delegates.length, 1); + assert.equal(st.pledges[2].delegates[0].id, 2); + }); + + it('Should not append delegate on veto delegation', async () => { + // propose the delegation + await liquidPledging.transfer(2, 2, 1000, 5, { from: delegate1, $extraGas: 100000 }); + + const origPledge = await liquidPledging.getPledge(2); + assert.equal(origPledge.amount, '0'); + + // veto the delegation + await liquidPledging.transfer(1, 5, 1000, 2, { from: giver1, $extraGas: 100000 }); + + const currentPledge = await liquidPledging.getPledge(2); + + assert.equal(currentPledge.amount, '1000'); + assert.equal(currentPledge.nDelegates, 1); + }); + + it('Pledge should have longest commitTime in delegation chain', async () => { + // delegate1 add delegate2 to chain + await liquidPledging.transfer(2, 2, 1000, 3, {from: delegate1, $extraGas: 100000}); + + // set the time + const now = Math.floor(new Date().getTime() / 1000); + await liquidPledging.setMockedTime(now); + + // propose project delegation + await liquidPledging.transfer(3, 3, 1000, 5, { from: delegate2, $extraGas: 100000 }); + + const pledge = await liquidPledging.getPledge(8); + assert.equal(pledge.commitTime, now + 259200); // 259200 is longest commitTime in delegationChain + }) +}); diff --git a/test/NormalOperation.js b/test/NormalOperation.js index 719b4d3..90ab7d6 100644 --- a/test/NormalOperation.js +++ b/test/NormalOperation.js @@ -19,7 +19,9 @@ const printState = async (liquidPledgingState) => { console.log(JSON.stringify(st, null, 2)); }; -describe('LiquidPledging test', () => { +describe('LiquidPledging test', function () { + this.timeout(0); + let testrpc; let web3; let accounts; @@ -59,12 +61,13 @@ describe('LiquidPledging test', () => { testrpc.close(); done(); }); + it('Should deploy LiquidPledging contract', async () => { vault = await Vault.new(web3); liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 }); await vault.setLiquidPledging(liquidPledging.$address); liquidPledgingState = new LiquidPledgingState(liquidPledging); - }).timeout(6000); + }); it('Should create a giver', async () => { await liquidPledging.addGiver('Giver1', 'URLGiver1', 86400, 0, { from: giver1 }); const nAdmins = await liquidPledging.numberOfPledgeAdmins(); @@ -75,13 +78,13 @@ describe('LiquidPledging test', () => { assert.equal(res[2], 'Giver1'); assert.equal(res[3], 'URLGiver1'); assert.equal(res[4], 86400); - }).timeout(6000); + }); it('Should make a donation', async () => { - await liquidPledging.donate(1, 1, { from: giver1, value: utils.toWei(1) }); + await liquidPledging.donate(1, 1, { from: giver1, value: utils.toWei('1') }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 1); await liquidPledging.getPledge(1); - }).timeout(6000); + }); it('Should create a delegate', async () => { await liquidPledging.addDelegate('Delegate1', 'URLDelegate1', 0, 0, { from: delegate1 }); const nAdmins = await liquidPledging.numberOfPledgeAdmins(); @@ -92,22 +95,22 @@ describe('LiquidPledging test', () => { assert.equal(res[2], 'Delegate1'); assert.equal(res[3], 'URLDelegate1'); assert.equal(res[4], 0); - }).timeout(6000); + }); it('Giver should delegate on the delegate', async () => { - await liquidPledging.transfer(1, 1, utils.toWei(0.5), 2, { from: giver1 }); + await liquidPledging.transfer(1, 1, utils.toWei('0.5'), 2, { from: giver1 }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 2); const res1 = await liquidPledging.getPledge(1); - assert.equal(res1[0], utils.toWei(0.5)); + assert.equal(res1[0], utils.toWei('0.5')); const res2 = await liquidPledging.getPledge(2); - assert.equal(res2[0], utils.toWei(0.5)); + assert.equal(res2[0], utils.toWei('0.5')); assert.equal(res2[1], 1); // One delegate const d = await liquidPledging.getPledgeDelegate(2, 1); assert.equal(d[0], 2); assert.equal(d[1], delegate1); assert.equal(d[2], 'Delegate1'); - }).timeout(6000); + }); it('Should create a 2 projects', async () => { await liquidPledging.addProject('Project1', 'URLProject1', adminProject1, 0, 86400, 0, { from: adminProject1 }); @@ -134,27 +137,27 @@ describe('LiquidPledging test', () => { assert.equal(res4[4], 86400); assert.equal(res4[5], 0); assert.equal(res4[6], false); - }).timeout(6000); + }); it('Delegate should assign to project1', async () => { const n = Math.floor(new Date().getTime() / 1000); - await liquidPledging.transfer(2, 2, utils.toWei(0.2), 3, { from: delegate1 }); + await liquidPledging.transfer(2, 2, utils.toWei('0.2'), 3, { from: delegate1 }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 3); const res3 = await liquidPledging.getPledge(3); - assert.equal(res3[0], utils.toWei(0.2)); + assert.equal(res3[0], utils.toWei('0.2')); assert.equal(res3[1], 1); // Owner assert.equal(res3[2], 1); // Delegates assert.equal(res3[3], 3); // Proposed Project assert.isAbove(utils.toDecimal(res3[4]), n + 86000); assert.equal(res3[5], 0); // Old Node assert.equal(res3[6], 0); // Not Paid - }).timeout(6000); + }); it('Giver should change his mind and assign half of it to project2', async () => { - await liquidPledging.transfer(1, 3, utils.toWei(0.1), 4, { from: giver1 }); + await liquidPledging.transfer(1, 3, utils.toWei('0.1'), 4, { from: giver1 }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 4); const res3 = await liquidPledging.getPledge(3); - assert.equal(res3[0], utils.toWei(0.1)); + assert.equal(res3[0], utils.toWei('0.1')); const res4 = await liquidPledging.getPledge(4); assert.equal(res4[1], 4); // Owner assert.equal(res4[2], 0); // Delegates @@ -162,15 +165,15 @@ describe('LiquidPledging test', () => { assert.equal(res4[4], 0); assert.equal(res4[5], 2); // Old Node assert.equal(res4[6], 0); // Not Paid - }).timeout(6000); + }); it('After the time, the project1 should be able to spend part of it', async () => { const n = Math.floor(new Date().getTime() / 1000); await liquidPledging.setMockedTime(n + 86401); - await liquidPledging.withdraw(3, utils.toWei(0.05), { from: adminProject1 }); + await liquidPledging.withdraw(3, utils.toWei('0.05'), { from: adminProject1 }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 6); const res5 = await liquidPledging.getPledge(5); - assert.equal(res5[0], utils.toWei(0.05)); + assert.equal(res5[0], utils.toWei('0.05')); assert.equal(res5[1], 3); // Owner assert.equal(res5[2], 0); // Delegates assert.equal(res5[3], 0); // Proposed Project @@ -178,14 +181,14 @@ describe('LiquidPledging test', () => { assert.equal(res5[5], 2); // Old Node assert.equal(res5[6], 0); // Not Paid const res6 = await liquidPledging.getPledge(6); - assert.equal(res6[0], utils.toWei(0.05)); + assert.equal(res6[0], utils.toWei('0.05')); assert.equal(res6[1], 3); // Owner assert.equal(res6[2], 0); // Delegates assert.equal(res6[3], 0); // Proposed Project assert.equal(res6[4], 0); // commit time assert.equal(res6[5], 2); // Old Node assert.equal(res6[6], 1); // Peinding paid Paid - }).timeout(6000); + }); it('Should collect the Ether', async () => { const initialBalance = await web3.eth.getBalance(adminProject1); @@ -199,28 +202,28 @@ describe('LiquidPledging test', () => { const nPledges = await liquidPledging.numberOfPledges(); assert.equal(nPledges, 7); const res7 = await liquidPledging.getPledge(7); - assert.equal(res7[0], utils.toWei(0.05)); + assert.equal(res7[0], utils.toWei('0.05')); assert.equal(res7[1], 3); // Owner assert.equal(res7[2], 0); // Delegates assert.equal(res7[3], 0); // Proposed Project assert.equal(res7[4], 0); // commit time assert.equal(res7[5], 2); // Old Node assert.equal(res7[6], 2); // Peinding paid Paid - }).timeout(6000); + }); it('Admin of the project1 should be able to cancel project1', async () => { await liquidPledging.cancelProject(3, { from: adminProject1 }); const st = await liquidPledgingState.getState(liquidPledging); assert.equal(st.admins[3].canceled, true); - }).timeout(6000); + }); it('Should not allow to withdraw from a canceled project', async () => { const st = await liquidPledgingState.getState(liquidPledging); assert.equal(utils.fromWei(st.pledges[5].amount), 0.05); await assertFail(async () => { - await liquidPledging.withdraw(5, utils.toWei(0.01), { from: adminProject1 }); + await liquidPledging.withdraw(5, utils.toWei('0.01'), { from: adminProject1 }); }); - }).timeout(6000); + }); it('Delegate should send part of this ETH to project2', async () => { - await liquidPledging.transfer(2, 5, utils.toWei(0.03), 4, { + await liquidPledging.transfer(2, 5, utils.toWei('0.03'), 4, { $extraGas: 100000, from: delegate1, }); @@ -231,57 +234,52 @@ describe('LiquidPledging test', () => { assert.equal(st.pledges[8].delegates.length, 1); assert.equal(st.pledges[8].delegates[0].id, 2); assert.equal(st.pledges[8].intendedProject, 4); - }).timeout(6000); + }); it('Giver should be able to send the remaining to project2', async () => { - await liquidPledging.transfer(1, 5, utils.toWei(0.02), 4, { from: giver1, $extraGas: 100000 }); + await liquidPledging.transfer(1, 5, utils.toWei('0.02'), 4, { from: giver1, $extraGas: 100000 }); const st = await liquidPledgingState.getState(liquidPledging); assert.equal(st.pledges.length, 9); assert.equal(utils.fromWei(st.pledges[5].amount), 0); assert.equal(utils.fromWei(st.pledges[4].amount), 0.12); - }).timeout(6000); + }); it('A subproject 2a and a delegate2 is created', async () => { await liquidPledging.addProject('Project2a', 'URLProject2a', adminProject2a, 4, 86400, 0, { from: adminProject2 }); await liquidPledging.addDelegate('Delegate2', 'URLDelegate2', 0, 0, { from: delegate2 }); const nAdmins = await liquidPledging.numberOfPledgeAdmins(); assert.equal(nAdmins, 6); - }).timeout(6000); + }); it('Project 2 delegate in delegate2', async () => { - await liquidPledging.transfer(4, 4, utils.toWei(0.02), 6, { from: adminProject2 }); + await liquidPledging.transfer(4, 4, utils.toWei('0.02'), 6, { from: adminProject2 }); const st = await liquidPledgingState.getState(liquidPledging); assert.equal(st.pledges.length, 10); assert.equal(utils.fromWei(st.pledges[9].amount), 0.02); assert.equal(utils.fromWei(st.pledges[4].amount), 0.1); - }).timeout(6000); + }); it('delegate2 assigns to projec2a', async () => { - await liquidPledging.transfer(6, 9, utils.toWei(0.01), 5, { from: delegate2 }); + await liquidPledging.transfer(6, 9, utils.toWei('0.01'), 5, { from: delegate2 }); const st = await liquidPledgingState.getState(liquidPledging); assert.equal(st.pledges.length, 11); assert.equal(utils.fromWei(st.pledges[9].amount), 0.01); assert.equal(utils.fromWei(st.pledges[10].amount), 0.01); - }).timeout(4000); + }); it('project2a authorize to spend a litle', async () => { const n = Math.floor(new Date().getTime() / 1000); await liquidPledging.setMockedTime(n + (86401 * 3)); - await liquidPledging.withdraw(10, utils.toWei(0.005), { from: adminProject2a }); + await liquidPledging.withdraw(10, utils.toWei('0.005'), { from: adminProject2a }); const st = await liquidPledgingState.getState(liquidPledging); assert.equal(st.pledges.length, 13); assert.equal(utils.fromWei(st.pledges[10].amount), 0); assert.equal(utils.fromWei(st.pledges[11].amount), 0.005); assert.equal(utils.fromWei(st.pledges[12].amount), 0.005); - }).timeout(4000); + }); it('project2 is canceled', async () => { await liquidPledging.cancelProject(4, { from: adminProject2 }); - }).timeout(6000); - it('project2 should not be able to confirm payment', async () => { - await assertFail(async () => { - await vault.confirmPayment(1); - }); - }).timeout(6000); + }); it('Should not be able to withdraw it', async () => { await assertFail(async () => { - await liquidPledging.withdraw(12, utils.toWei(0.005), { from: giver1 }); + await liquidPledging.withdraw(12, utils.toWei('0.005'), { from: giver1 }); }); - }).timeout(6000); + }); it('Should be able to cancel payment', async () => { // bug somewhere which will throw invalid op_code if we don't provide gas or extraGas await vault.cancelPayment(1, { $extraGas: 100000 }); @@ -290,14 +288,22 @@ describe('LiquidPledging test', () => { assert.equal(utils.fromWei(st.pledges[2].amount), 0.31); assert.equal(utils.fromWei(st.pledges[11].amount), 0); assert.equal(utils.fromWei(st.pledges[12].amount), 0); - }).timeout(6000); + }); it('original owner should recover the remaining funds', async () => { - await liquidPledging.withdraw(1, utils.toWei(0.5), { from: giver1 }); - await liquidPledging.withdraw(2, utils.toWei(0.31), { from: giver1 }); - await liquidPledging.withdraw(4, utils.toWei(0.1), { $extraGas: 100000, from: giver1 }); + const pledges = [ + { amount: utils.toWei('0.5'), id: 1 }, + { amount: utils.toWei('0.31'), id: 2 }, + { amount: utils.toWei('0.1'), id: 4 }, + { amount: utils.toWei('0.03'), id: 8 }, + { amount: utils.toWei('0.01'), id: 9 }, + ]; - await liquidPledging.withdraw(8, utils.toWei(0.03), { $extraGas: 100000, from: giver1 }); - await liquidPledging.withdraw(9, utils.toWei(0.01), { $extraGas: 100000, from: giver1 }); + // .substring is to remove the 0x prefix on the toHex result + const encodedPledges = pledges.map(p => { + return '0x' + utils.padLeft(utils.toHex(p.amount).substring(2), 48) + utils.padLeft(utils.toHex(p.id).substring(2), 16); + }); + + await liquidPledging.mWithdraw(encodedPledges, { from: giver1, $extraGas: 500000 }); const initialBalance = await web3.eth.getBalance(giver1); await vault.multiConfirm([2, 3, 4, 5, 6]); @@ -306,11 +312,11 @@ describe('LiquidPledging test', () => { const collected = utils.fromWei(utils.toBN(finalBalance).sub(utils.toBN(initialBalance))); assert.equal(collected, 0.95); - }).timeout(12000); + }); it('Should make a donation and create giver', async () => { const oldNPledges = await liquidPledging.numberOfPledges(); const oldNAdmins = await liquidPledging.numberOfPledgeAdmins(); - await liquidPledging.donate(0, 1, { from: giver2, value: utils.toWei(1) }); + await liquidPledging.donate(0, 1, { from: giver2, value: utils.toWei('1') }); const nPledges = await liquidPledging.numberOfPledges(); assert.equal(utils.toDecimal(nPledges), utils.toDecimal(oldNPledges) + 1); const nAdmins = await liquidPledging.numberOfPledgeAdmins(); @@ -321,11 +327,11 @@ describe('LiquidPledging test', () => { assert.equal(res[2], ''); assert.equal(res[3], ''); assert.equal(res[4], 259200); // default to 3 day commitTime - }).timeout(6000); + }); it('Should allow childProject with different parentProject owner', async () => { const nAdminsBefore = await liquidPledging.numberOfPledgeAdmins(); await liquidPledging.addProject('Project3', 'URLProject3', adminProject3, 4, 86400, 0, { from: adminProject3 }); const nAdmins = await liquidPledging.numberOfPledgeAdmins(); assert.equal(nAdmins, utils.toDecimal(nAdminsBefore) + 1); - }).timeout(6000); + }); }); diff --git a/test/NormalizePledge.js b/test/NormalizePledge.js new file mode 100644 index 0000000..e1236a7 --- /dev/null +++ b/test/NormalizePledge.js @@ -0,0 +1,127 @@ +/* eslint-env mocha */ +/* eslint-disable no-await-in-loop */ +const TestRPC = require('ethereumjs-testrpc'); +const Web3 = require('web3'); +const chai = require('chai'); +const liquidpledging = require('../index.js'); + +const LiquidPledging = liquidpledging.LiquidPledgingMock; +const LiquidPledgingState = liquidpledging.LiquidPledgingState; +const Vault = liquidpledging.Vault; +const assertFail = require('./helpers/assertFail'); +const assert = chai.assert; + +const printState = async (liquidPledgingState) => { + const st = await liquidPledgingState.getState(); + console.log(JSON.stringify(st, null, 2)); +}; + +describe('NormalizePledge test', function () { + this.timeout(0); + + let testrpc; + let web3; + let accounts; + let liquidPledging; + let liquidPledgingState; + let vault; + let giver1; + let giver2; + let delegate1; + let delegate2; + let adminProject1; + let adminProject2; + + before(async () => { + testrpc = TestRPC.server({ + ws: true, + gasLimit: 5800000, + total_accounts: 10, + }); + + testrpc.listen(8546, '127.0.0.1'); + + web3 = new Web3('ws://localhost:8546'); + accounts = await web3.eth.getAccounts(); + giver1 = accounts[1]; + delegate1 = accounts[2]; + delegate2 = accounts[3]; + adminProject1 = accounts[4]; + adminProject2 = accounts[5]; + giver2 = accounts[6]; + }); + + after((done) => { + testrpc.close(); + done(); + }); + + it('Should deploy LiquidPledging contract', async () => { + vault = await Vault.new(web3); + liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 }); + await vault.setLiquidPledging(liquidPledging.$address); + liquidPledgingState = new LiquidPledgingState(liquidPledging); + }); + + it('Should add pledgeAdmins', async () => { + await liquidPledging.addGiver('Giver1', 'URLGiver1', 86400, 0, { from: giver1 }); // pledgeAdmin 1 + await liquidPledging.addDelegate('Delegate1', 'URLDelegate1', 259200, 0, { from: delegate1 }); // pledgeAdmin 2 + await liquidPledging.addDelegate('Delegate2', 'URLDelegate2', 0, 0, { from: delegate2 }); // pledgeAdmin 3 + await liquidPledging.addProject('Project1', 'URLProject1', adminProject1, 0, 0, 0, { from: adminProject1 }); // pledgeAdmin 4 + await liquidPledging.addProject('Project2', 'URLProject2', adminProject2, 0, 0, 0, { from: adminProject2 }); // pledgeAdmin 5 + await liquidPledging.addGiver('Giver2', 'URLGiver2', 0, 0, { from: giver2 }); // pledgeAdmin 6 + + const nAdmins = await liquidPledging.numberOfPledgeAdmins(); + assert.equal(nAdmins, 6); + }); + + it('Should commit pledges if commitTime has passed', async () => { + // commitTime 259200 + await liquidPledging.donate(1, 2, {from: giver1, value: 1000, $extraGas: 50000}); + // commitTime 86400 + await liquidPledging.donate(1, 3, {from: giver1, value: 1000, $extraGas: 50000}); + // commitTime 0 + await liquidPledging.donate(6, 3, {from: giver2, value: 1000, $extraGas: 50000}); + + // set the time + const now = Math.floor(new Date().getTime() / 1000); + await liquidPledging.setMockedTime(now); + + // delegate to project + await liquidPledging.transfer(2, 2, 1000, 4, {from: delegate1, $extraGas: 100000}); + await liquidPledging.transfer(3, 3, 1000, 4, {from: delegate2, $extraGas: 100000}); + await liquidPledging.transfer(3, 5, 1000, 4, {from: delegate2, $extraGas: 100000}); + + // advance the time + await liquidPledging.setMockedTime( now + 100000 ); + + await liquidPledging.mNormalizePledge([6, 7, 8], {$extraGas: 100000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges.length, 11); + assert.equal(st.pledges[6].amount, 1000); + assert.equal(st.pledges[9].amount, 1000); + assert.equal(st.pledges[9].owner, 4); + assert.equal(st.pledges[9].oldPledge, 3); + assert.equal(st.pledges[10].amount, 1000); + assert.equal(st.pledges[10].owner, 4); + assert.equal(st.pledges[10].oldPledge, 5); + }); + + it('Should transfer pledge to oldestPledgeNotCanceled', async () => { + await liquidPledging.transfer(4, 10, 1000, 5, {from: adminProject1, $extraGas: 100000}); + + // cancel projects + await liquidPledging.cancelProject(4, {from: adminProject1}); + await liquidPledging.cancelProject(5, {from: adminProject2}); + + await liquidPledging.mNormalizePledge([9, 11], {$extraGas: 100000}); + + const st = await liquidPledgingState.getState(); + assert.equal(st.pledges.length, 12); + assert.equal(st.pledges[3].amount, 1000); + assert.equal(st.pledges[5].amount, 1000); + assert.equal(st.pledges[9].amount, 0); + assert.equal(st.pledges[11].amount, 0); + }) +}); diff --git a/test/VetoDelegation.js b/test/VetoDelegation.js deleted file mode 100644 index 2617e8f..0000000 --- a/test/VetoDelegation.js +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-env mocha */ -/* eslint-disable no-await-in-loop */ -const TestRPC = require('ethereumjs-testrpc'); -const Web3 = require('web3'); -const chai = require('chai'); -const liquidpledging = require('../index.js'); - -const LiquidPledging = liquidpledging.LiquidPledgingMock; -const LiquidPledgingState = liquidpledging.LiquidPledgingState; -const Vault = liquidpledging.Vault; -const assert = chai.assert; - -const printState = async (liquidPledgingState) => { - const st = await liquidPledgingState.getState(); - console.log(JSON.stringify(st, null, 2)); -}; - -describe('LiquidPledging test', () => { - let testrpc; - let web3; - let accounts; - let liquidPledging; - let liquidPledgingState; - let vault; - let giver1; - let delegate1; - let adminProject1; - - before(async () => { - testrpc = TestRPC.server({ - ws: true, - gasLimit: 5800000, - total_accounts: 10, - }); - - testrpc.listen(8546, '127.0.0.1'); - - web3 = new Web3('ws://localhost:8546'); - accounts = await web3.eth.getAccounts(); - giver1 = accounts[1]; - delegate1 = accounts[2]; - adminProject1 = accounts[3]; - }); - - after((done) => { - testrpc.close(); - done(); - }); - - it('Should deploy LiquidPledgin contract', async () => { - vault = await Vault.new(web3); - liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 }); - await vault.setLiquidPledging(liquidPledging.$address); - liquidPledgingState = new LiquidPledgingState(liquidPledging); - }); - - it('Should create a delegate', async () => { - await liquidPledging.addDelegate('Delegate1', 'URLDelegate1', 0, 0, { from: delegate1 }); - const nAdmins = await liquidPledging.numberOfPledgeAdmins(); - assert.equal(nAdmins, 1); - const res = await liquidPledging.getPledgeAdmin(1); - assert.equal(res[0], 1); // Giver - assert.equal(res[1], delegate1); - assert.equal(res[2], 'Delegate1'); - assert.equal(res[3], 'URLDelegate1'); - assert.equal(res[4], 0); - }).timeout(6000); - - it('Should make a donation and create giver', async () => { - await liquidPledging.donate(0, 1, { from: giver1, value: '1000', gas: 2000000 }); - const nPledges = await liquidPledging.numberOfPledges(); - assert.equal(nPledges, 2); - const nAdmins = await liquidPledging.numberOfPledgeAdmins(); - assert.equal(nAdmins, 2); - const res = await liquidPledging.getPledgeAdmin(nAdmins); - assert.equal(res[0], 0); // Giver - assert.equal(res[1], giver1); - assert.equal(res[2], ''); - assert.equal(res[3], ''); - assert.equal(res[4], 259200); // default to 3 day commitTime - }); - - it('Should not append delegate on veto delegation', async () => { - await liquidPledging.addProject('Project 1', 'url', adminProject1, 0, 0, 0); - // propose the delegation - await liquidPledging.transfer(1, 2, '1000', 3, { from: delegate1, gas: 400000 }); - // await liquidPledging.transfer(1, 2, '1000', 5, { from: giver1, gas: 400000 }); - - const origPledge = await liquidPledging.getPledge(2); - assert.equal(origPledge.amount, '0'); - -// await printState(liquidPledgingState); - // veto the delegation - await liquidPledging.transfer(2, 3, '1000', 1, { from: giver1, gas: 400000 }); - - const currentPledge = await liquidPledging.getPledge(2); - -// await printState(liquidPledgingState); - - assert.equal(currentPledge.amount, '1000'); - assert.equal(currentPledge.nDelegates, 1); - }); -}); diff --git a/test/helpers/assertFail.js b/test/helpers/assertFail.js index 6633b60..123c3df 100644 --- a/test/helpers/assertFail.js +++ b/test/helpers/assertFail.js @@ -6,7 +6,7 @@ module.exports = async function(callback) { try { await callback(); } catch (error) { - if (error.message.search("invalid opcode")) web3_error_thrown = true; + if (error.message.includes("invalid opcode")) web3_error_thrown = true; } assert.ok(web3_error_thrown, "Transaction should fail"); };