erc20-demurrage-token

ERC20 token with redistributed continual demurrage
Log | Files | Refs | README

commit bcc957f86162993a2c92adf7aa7525475450c219
parent 84b1a5b439f59340caddb7feee134e28213654c0
Author: lash <dev@holbrook.no>
Date:   Wed,  8 Feb 2023 08:51:57 +0000

Remove commented contract code, makefile single nocap only

Diffstat:
Mpython/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin | 4++--
Msolidity/DemurrageTokenSingleNocap.sol | 55+++++--------------------------------------------------
Msolidity/Makefile | 5+++--
3 files changed, 10 insertions(+), 54 deletions(-)

diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin @@ -1 +1 @@ -61010060405264e8d4a510006a52b7d2dcc80cd2e40000006200002391906200043b565b6080908152503480156200003657600080fd5b506040516200448a3803806200448a83398181016040528101906200005c91906200073a565b62000066620003c1565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550866006908162000132919062000a5b565b50856007908162000144919062000a5b565b508460ff166008819055504260038190555060035460a08181525050603c836200016f91906200043b565b60c0818152505060646a52b7d2dcc80cd2e400000062000190919062000b42565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836fffffffffffffffffffffffffffffffff1660e08181525050620002326000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16600060016200033d640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550505081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000b88565b62000347620003c1565b62000351620003c1565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff16815250508481604001906cffffffffffffffffffffffffff1690816cffffffffffffffffffffffffff168152505080915050949350505050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff16815260200160006cffffffffffffffffffffffffff1681525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004488262000402565b9150620004558362000402565b9250828202620004658162000402565b915082820484148315176200047f576200047e6200040c565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ef82620004a4565b810181811067ffffffffffffffff82111715620005115762000510620004b5565b5b80604052505050565b60006200052662000486565b9050620005348282620004e4565b919050565b600067ffffffffffffffff821115620005575762000556620004b5565b5b6200056282620004a4565b9050602081019050919050565b60005b838110156200058f57808201518184015260208101905062000572565b60008484015250505050565b6000620005b2620005ac8462000539565b6200051a565b905082815260208101848484011115620005d157620005d06200049f565b5b620005de8482856200056f565b509392505050565b600082601f830112620005fe57620005fd6200049a565b5b8151620006108482602086016200059b565b91505092915050565b600060ff82169050919050565b620006318162000619565b81146200063d57600080fd5b50565b600081519050620006518162000626565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6200067e8162000657565b81146200068a57600080fd5b50565b6000815190506200069e8162000673565b92915050565b620006af8162000402565b8114620006bb57600080fd5b50565b600081519050620006cf81620006a4565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070282620006d5565b9050919050565b6200071481620006f5565b81146200072057600080fd5b50565b600081519050620007348162000709565b92915050565b60008060008060008060c087890312156200075a576200075962000490565b5b600087015167ffffffffffffffff8111156200077b576200077a62000495565b5b6200078989828a01620005e6565b965050602087015167ffffffffffffffff811115620007ad57620007ac62000495565b5b620007bb89828a01620005e6565b9550506040620007ce89828a0162000640565b9450506060620007e189828a016200068d565b9350506080620007f489828a01620006be565b92505060a06200080789828a0162000723565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086757607f821691505b6020821081036200087d576200087c6200081f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620008ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008a8565b620008f68683620008a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000939620009336200092d8462000402565b6200090e565b62000402565b9050919050565b6000819050919050565b620009558362000918565b6200096d620009648262000940565b848454620008b8565b825550505050565b600090565b6200098462000975565b620009918184846200094a565b505050565b5b81811015620009b957620009ad6000826200097a565b60018101905062000997565b5050565b601f82111562000a0857620009d28162000883565b620009dd8462000898565b81016020851015620009ed578190505b62000a05620009fc8562000898565b83018262000996565b50505b505050565b60008160020a8304905092915050565b600062000a306000198460080262000a0d565b1980831691505092915050565b600062000a4b838362000a1d565b9150826002028217905092915050565b62000a668262000814565b67ffffffffffffffff81111562000a825762000a81620004b5565b5b62000a8e82546200084e565b62000a9b828285620009bd565b600060209050601f83116001811462000ad3576000841562000abe578287015190505b62000aca858262000a3d565b86555062000b3a565b601f19841662000ae38662000883565b60005b8281101562000b0d5784890151825560018201915060208501945060208101905062000ae6565b8683101562000b2d578489015162000b29601f89168262000a1d565b8355505b6001600288020188555050505b505050505050565b600062000b4f8262000657565b915062000b5c8362000657565b925082820262000b6c8162000657565b915080821462000b815762000b806200040c565b5b5092915050565b60805160a05160c05160e05161388962000c0160003960008181610eb9015261119c01526000818161170001528181611dbe0152818161236b015261250801526000818161172c01528181612529015261256e0152600081816118060152818161183e015281816118b6015261234701526138896000f3fe608060405234801561001057600080fd5b50600436106102d8576000357c010000000000000000000000000000000000000000000000000000000090048063731f237c1161019f578063a9059cbb11610106578063d397de60116100bf578063eda4e6d611610099578063eda4e6d6146109bf578063f2fde38b146109dd578063f83da35d14610a0d578063f84e521314610a3d576102d8565b8063d397de6014610953578063d89135cd14610983578063e8095295146109a1576102d8565b8063a9059cbb14610869578063ab28cea014610899578063b470aade146108b7578063c0ab7077146108d5578063c7a7f89a14610905578063d340ef8a14610935576102d8565b80638f0b2d5d116101585780638f0b2d5d146107815780638f1df6bc1461079d578063936d9e7a146107bb57806395d89b41146107eb578063983b2d5614610809578063a457c2d714610839576102d8565b8063731f237c146106cd57806373f42561146106eb57806374bedb951461070957806379ba50971461072757806384dde4af146107455780638da5cb5b14610763576102d8565b806340452d911161024357806351b4541c116101fc57806351b4541c146105bf57806358b2833b146105ef5780636721d4ef1461060d5780636787a9be1461063d5780636a2d094e1461066d57806370a082311461069d576102d8565b806340452d91146104b157806342966c68146104e3578063449a52f8146104ff57806347a505171461052f5780634abfbba21461055f5780634d0df4fd1461058f576102d8565b8063229ba19711610295578063229ba197146103b557806323b872dd146103d35780633092afd5146104035780633133348714610433578063313ce567146104635780633950935114610481576102d8565b806301ffc9a7146102dd57806306fdde031461030d578063095ea7b31461032b57806309f28f3c1461035b57806318160ddd146103795780631989c6a814610397575b600080fd5b6102f760048036038101906102f29190612d7b565b610a6d565b6040516103049190612dc3565b60405180910390f35b610315610c13565b6040516103229190612e6e565b60405180910390f35b61034560048036038101906103409190612f24565b610ca1565b6040516103529190612dc3565b60405180910390f35b610363610e72565b6040516103709190612f8f565b60405180910390f35b610381610e94565b60405161038e9190612fb9565b60405180910390f35b61039f610eab565b6040516103ac9190612fb9565b60405180910390f35b6103bd610eb7565b6040516103ca9190612fb9565b60405180910390f35b6103ed60048036038101906103e89190612fd4565b610edb565b6040516103fa9190612dc3565b60405180910390f35b61041d60048036038101906104189190613027565b61108e565b60405161042a9190612dc3565b60405180910390f35b61044d60048036038101906104489190613054565b611181565b60405161045a9190612fb9565b60405180910390f35b61046b611235565b6040516104789190612fb9565b60405180910390f35b61049b60048036038101906104969190612f24565b61123b565b6040516104a89190612dc3565b60405180910390f35b6104cb60048036038101906104c69190613094565b6113d1565b6040516104da9392919061312c565b60405180910390f35b6104fd60048036038101906104f89190613094565b611445565b005b61051960048036038101906105149190612f24565b611573565b6040516105269190612dc3565b60405180910390f35b61054960048036038101906105449190613027565b6116b3565b6040516105569190612fb9565b60405180910390f35b61057960048036038101906105749190613094565b6116fc565b6040516105869190612fb9565b60405180910390f35b6105a960048036038101906105a491906132cb565b61175c565b6040516105b69190612dc3565b60405180910390f35b6105d960048036038101906105d49190613094565b6117c9565b6040516105e69190612fb9565b60405180910390f35b6105f76117ea565b6040516106049190612fb9565b60405180910390f35b61062760048036038101906106229190613054565b6117f0565b6040516106349190612fb9565b60405180910390f35b61065760048036038101906106529190613094565b611871565b6040516106649190612fb9565b60405180910390f35b61068760048036038101906106829190613094565b6118f1565b6040516106949190612fb9565b60405180910390f35b6106b760048036038101906106b29190613027565b611912565b6040516106c49190612fb9565b60405180910390f35b6106d56119ca565b6040516106e29190612dc3565b60405180910390f35b6106f36119db565b6040516107009190612fb9565b60405180910390f35b6107116119e1565b60405161071e9190612fb9565b60405180910390f35b61072f6119e7565b60405161073c9190612dc3565b60405180910390f35b61074d611b8e565b60405161075a9190613307565b60405180910390f35b61076b611bb4565b6040516107789190613307565b60405180910390f35b61079b60048036038101906107969190613027565b611bda565b005b6107a5611c78565b6040516107b29190612dc3565b60405180910390f35b6107d560048036038101906107d091906132cb565b611f17565b6040516107e29190612fb9565b60405180910390f35b6107f3611f45565b6040516108009190612e6e565b60405180910390f35b610823600480360381019061081e9190613027565b611fd3565b6040516108309190612dc3565b60405180910390f35b610853600480360381019061084e9190612f24565b612090565b6040516108609190612dc3565b60405180910390f35b610883600480360381019061087e9190612f24565b6122af565b6040516108909190612dc3565b60405180910390f35b6108a1612345565b6040516108ae9190612fb9565b60405180910390f35b6108bf612369565b6040516108cc9190612fb9565b60405180910390f35b6108ef60048036038101906108ea9190613094565b61238d565b6040516108fc9190612dc3565b60405180910390f35b61091f600480360381019061091a91906132cb565b6124c5565b60405161092c9190612fb9565b60405180910390f35b61093d6124de565b60405161094a9190612fb9565b60405180910390f35b61096d600480360381019061096891906132cb565b6124e4565b60405161097a9190612fb9565b60405180910390f35b61098b6124f8565b6040516109989190612fb9565b60405180910390f35b6109a9612502565b6040516109b69190612f8f565b60405180910390f35b6109c761256c565b6040516109d49190612fb9565b60405180910390f35b6109f760048036038101906109f29190613027565b612590565b604051610a049190612dc3565b60405180910390f35b610a276004803603810190610a229190613322565b612632565b604051610a3491906133f8565b60405180910390f35b610a576004803603810190610a5291906132cb565b6126b2565b604051610a649190612fb9565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ac15760019050610c0e565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b135760019050610c0e565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b655760019050610c0e565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bb75760019050610c0e565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c095760019050610c0e565b600090505b919050565b60068054610c2090613442565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4c90613442565b8015610c995780601f10610c6e57610100808354040283529160200191610c99565b820191906000526020600020905b815481529060010190602001808311610c7c57829003601f168201915b505050505081565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d6d5760008314610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d63906134bf565b60405180910390fd5b5b610d75611c78565b50610d7f83611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610e5f9190612fb9565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600c54600954610ea6919061350e565b905090565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610ee8611c78565b50610ef284611871565b915081600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f7d57600080fd5b81600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611009919061350e565b9250508190555061101b8686846126cf565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161107a9190612fb9565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061111757503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61112057600080fd5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f00000000000000000000000000000000000000000000000000000000000000006111c59190613571565b905060005b8481101561120e5764e8d4a5100082846111e491906135a2565b6111ee9190613571565b836111f9919061350e565b92508080611206906135e4565b9150506111ca565b5064e8d4a51000858361122191906135a2565b61122b9190613571565b9250505092915050565b60085481565b600080611246611c78565b5061125083611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112de919061362c565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516113be9190612fb9565b60405180910390a3600191505092915050565b600081815481106113e157600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a90046cffffffffffffffffffffffffff16905083565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149b57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156114e757600080fd5b60006114f282611871565b90506114fc6119ca565b5061150733826126f4565b5081600c600082825461151a919061362c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516115679190612fb9565b60405180910390a25050565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906136ac565b60405180910390fd5b61160a611c78565b5061161483611871565b90508260096000828254611628919061362c565b9250508190555061163984826127fb565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516116979190612fb9565b60405180910390a36116a76128bf565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261172a91906135a2565b7f0000000000000000000000000000000000000000000000000000000000000000611755919061362c565b9050919050565b600080826000015163ffffffff16111561177957600090506117c4565b6000826020015168ffffffffffffffffff16111561179a57600090506117c4565b600082604001516cffffffffffffffffffffffffff1611156117bf57600090506117c4565b600190505b919050565b6000603c82426117d9919061350e565b6117e39190613571565b9050919050565b60035481565b6000806402540be4008361180491906135a2565b7f000000000000000000000000000000000000000000000000000000000000000061182f919061350e565b8461183a91906135a2565b90507f0000000000000000000000000000000000000000000000000000000000000000816118689190613571565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166118a291906136cc565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836118e091906135a2565b6118ea9190613571565b9050919050565b6000603c8242611901919061350e565b61190b9190613571565b9050919050565b600080600080611921856116b3565b925061192e6003546117c9565b905061197a6402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661196291906136cc565b6fffffffffffffffffffffffffffffffff1682611181565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006119aa91906135a2565b82846119b691906135a2565b6119c09190613571565b9350505050919050565b60006119d6600061238d565b905090565b600c5481565b600b5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3457600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c82612cd3565b611c8a612cd3565b611c92612cd3565b6000806000806000611ca26119ca565b50611cab612a9c565b9750611cb68861175c565b15611ccc57600098505050505050505050611f14565b6000600a5481548110611ce257611ce1613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815250509550611d9e886124e4565b9450600185611dad919061362c565b9050611db8866126b2565b9350603c7f0000000000000000000000000000000000000000000000000000000000000000611de79190613571565b9150611df38483611181565b9250611e09600084611e03610e94565b84612632565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff1602179055505050611ecf87612c41565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611eff9190612fb9565b60405180910390a16001985050505050505050505b90565b6000806000611f25846124c5565b9150611f30846126b2565b9050611f3c82826117f0565b92505050919050565b60078054611f5290613442565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e90613442565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461202f57600080fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008061209c83611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561212757600080fd5b61212f611c78565b5080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bc919061350e565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161229c9190612fb9565b60405180910390a3600191505092915050565b60008060006122bc611c78565b506122c684611871565b91506122d33386846126cf565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516123329190612fb9565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600061239d6003546117c9565b9150600082036123b2576000925050506124c0565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000841180156123f457508184105b156123fd578391505b6124078183611181565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c8261244c91906135a2565b600354612459919061362c565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff166040516124b19190613773565b60405180910390a46001925050505b919050565b6000816020015168ffffffffffffffffff169050919050565b600a5481565b6000816000015163ffffffff169050919050565b6000600c54905090565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612553919061350e565b61255d9190613571565b612567919061362c565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ec57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b61263a612cd3565b612642612cd3565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff16815250508481604001906cffffffffffffffffffffffffff1690816cffffffffffffffffffffffffff168152505080915050949350505050565b600081604001516cffffffffffffffffffffffffff169050919050565b6000806126dc85846126f4565b506126e784846127fb565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361275057600093505050506127f5565b612759866116b3565b92508483101561279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906137da565b60405180910390fd5b84836127aa919061350e565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361285757600093505050506128b9565b612860866116b3565b9250848361286e919061362c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006128c9612cd3565b60006128d3610e94565b9050600060016000805490506128e9919061350e565b815481106128fa576128f9613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506129e4919061350e565b815481106129f5576129f4613709565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff16021790555090505060019250505090565b612aa4612cd3565b612aac612cd3565b612ab4612cd3565b600080600a5481548110612acb57612aca613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c099190613826565b6fffffffffffffffffffffffffffffffff169050612c26836124e4565b8111612c3757819350505050612c3e565b8293505050505b90565b6000806000612c4f84611f17565b9150600b54612c5d83611871565b612c67919061350e565b9050612c95600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127fb565b506001600a6000828254612ca9919061362c565b9250508190555080600b6000828254612cc2919061362c565b925050819055508192505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff16815260200160006cffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d5881612d23565b8114612d6357600080fd5b50565b600081359050612d7581612d4f565b92915050565b600060208284031215612d9157612d90612d1e565b5b6000612d9f84828501612d66565b91505092915050565b60008115159050919050565b612dbd81612da8565b82525050565b6000602082019050612dd86000830184612db4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e18578082015181840152602081019050612dfd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e4082612dde565b612e4a8185612de9565b9350612e5a818560208601612dfa565b612e6381612e24565b840191505092915050565b60006020820190508181036000830152612e888184612e35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ebb82612e90565b9050919050565b612ecb81612eb0565b8114612ed657600080fd5b50565b600081359050612ee881612ec2565b92915050565b6000819050919050565b612f0181612eee565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612d1e565b5b6000612f4985828601612ed9565b9250506020612f5a85828601612f0f565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612f8981612f64565b82525050565b6000602082019050612fa46000830184612f80565b92915050565b612fb381612eee565b82525050565b6000602082019050612fce6000830184612faa565b92915050565b600080600060608486031215612fed57612fec612d1e565b5b6000612ffb86828701612ed9565b935050602061300c86828701612ed9565b925050604061301d86828701612f0f565b9150509250925092565b60006020828403121561303d5761303c612d1e565b5b600061304b84828501612ed9565b91505092915050565b6000806040838503121561306b5761306a612d1e565b5b600061307985828601612f0f565b925050602061308a85828601612f0f565b9150509250929050565b6000602082840312156130aa576130a9612d1e565b5b60006130b884828501612f0f565b91505092915050565b600063ffffffff82169050919050565b6130da816130c1565b82525050565b600068ffffffffffffffffff82169050919050565b6130fe816130e0565b82525050565b60006cffffffffffffffffffffffffff82169050919050565b61312681613104565b82525050565b600060608201905061314160008301866130d1565b61314e60208301856130f5565b61315b604083018461311d565b949350505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131a082612e24565b810181811067ffffffffffffffff821117156131bf576131be613168565b5b80604052505050565b60006131d2612d14565b90506131de8282613197565b919050565b6131ec816130c1565b81146131f757600080fd5b50565b600081359050613209816131e3565b92915050565b613218816130e0565b811461322357600080fd5b50565b6000813590506132358161320f565b92915050565b61324481613104565b811461324f57600080fd5b50565b6000813590506132618161323b565b92915050565b60006060828403121561327d5761327c613163565b5b61328760606131c8565b90506000613297848285016131fa565b60008301525060206132ab84828501613226565b60208301525060406132bf84828501613252565b60408301525092915050565b6000606082840312156132e1576132e0612d1e565b5b60006132ef84828501613267565b91505092915050565b61330181612eb0565b82525050565b600060208201905061331c60008301846132f8565b92915050565b6000806000806080858703121561333c5761333b612d1e565b5b600061334a87828801612f0f565b945050602061335b87828801612f0f565b935050604061336c87828801612f0f565b925050606061337d87828801612f0f565b91505092959194509250565b613392816130c1565b82525050565b6133a1816130e0565b82525050565b6133b081613104565b82525050565b6060820160008201516133cc6000850182613389565b5060208201516133df6020850182613398565b5060408201516133f260408501826133a7565b50505050565b600060608201905061340d60008301846133b6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345a57607f821691505b60208210810361346d5761346c613413565b5b50919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b60006134a9600a83612de9565b91506134b482613473565b602082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351982612eee565b915061352483612eee565b925082820390508181111561353c5761353b6134df565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061357c82612eee565b915061358783612eee565b92508261359757613596613542565b5b828204905092915050565b60006135ad82612eee565b91506135b883612eee565b92508282026135c681612eee565b915082820484148315176135dd576135dc6134df565b5b5092915050565b60006135ef82612eee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613621576136206134df565b5b600182019050919050565b600061363782612eee565b915061364283612eee565b925082820190508082111561365a576136596134df565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000613696600a83612de9565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b60006136d782612f64565b91506136e283612f64565b92508282026136f081612f64565b9150808214613702576137016134df565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061375d61375861375384612f64565b613738565b612eee565b9050919050565b61376d81613742565b82525050565b60006020820190506137886000830184613764565b92915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b60006137c4600d83612de9565b91506137cf8261378e565b602082019050919050565b600060208201905081810360008301526137f3816137b7565b9050919050565b61380381612f64565b811461380e57600080fd5b50565b600081519050613820816137fa565b92915050565b60006020828403121561383c5761383b612d1e565b5b600061384a84828501613811565b9150509291505056fea2646970667358221220a45105fb2aa83528b6489fb5be816bc33624d5fca0a1d7bf35e11168aaa4858964736f6c63430008110033 -\ No newline at end of file +61010060405264e8d4a510006a52b7d2dcc80cd2e40000006200002391906200043b565b6080908152503480156200003657600080fd5b506040516200448a3803806200448a83398181016040528101906200005c91906200073a565b62000066620003c1565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550866006908162000132919062000a5b565b50856007908162000144919062000a5b565b508460ff166008819055504260038190555060035460a08181525050603c836200016f91906200043b565b60c0818152505060646a52b7d2dcc80cd2e400000062000190919062000b42565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836fffffffffffffffffffffffffffffffff1660e08181525050620002326000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16600060016200033d640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550505081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000b88565b62000347620003c1565b62000351620003c1565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff16815250508481604001906cffffffffffffffffffffffffff1690816cffffffffffffffffffffffffff168152505080915050949350505050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff16815260200160006cffffffffffffffffffffffffff1681525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004488262000402565b9150620004558362000402565b9250828202620004658162000402565b915082820484148315176200047f576200047e6200040c565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ef82620004a4565b810181811067ffffffffffffffff82111715620005115762000510620004b5565b5b80604052505050565b60006200052662000486565b9050620005348282620004e4565b919050565b600067ffffffffffffffff821115620005575762000556620004b5565b5b6200056282620004a4565b9050602081019050919050565b60005b838110156200058f57808201518184015260208101905062000572565b60008484015250505050565b6000620005b2620005ac8462000539565b6200051a565b905082815260208101848484011115620005d157620005d06200049f565b5b620005de8482856200056f565b509392505050565b600082601f830112620005fe57620005fd6200049a565b5b8151620006108482602086016200059b565b91505092915050565b600060ff82169050919050565b620006318162000619565b81146200063d57600080fd5b50565b600081519050620006518162000626565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6200067e8162000657565b81146200068a57600080fd5b50565b6000815190506200069e8162000673565b92915050565b620006af8162000402565b8114620006bb57600080fd5b50565b600081519050620006cf81620006a4565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070282620006d5565b9050919050565b6200071481620006f5565b81146200072057600080fd5b50565b600081519050620007348162000709565b92915050565b60008060008060008060c087890312156200075a576200075962000490565b5b600087015167ffffffffffffffff8111156200077b576200077a62000495565b5b6200078989828a01620005e6565b965050602087015167ffffffffffffffff811115620007ad57620007ac62000495565b5b620007bb89828a01620005e6565b9550506040620007ce89828a0162000640565b9450506060620007e189828a016200068d565b9350506080620007f489828a01620006be565b92505060a06200080789828a0162000723565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086757607f821691505b6020821081036200087d576200087c6200081f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620008ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008a8565b620008f68683620008a8565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000939620009336200092d8462000402565b6200090e565b62000402565b9050919050565b6000819050919050565b620009558362000918565b6200096d620009648262000940565b848454620008b8565b825550505050565b600090565b6200098462000975565b620009918184846200094a565b505050565b5b81811015620009b957620009ad6000826200097a565b60018101905062000997565b5050565b601f82111562000a0857620009d28162000883565b620009dd8462000898565b81016020851015620009ed578190505b62000a05620009fc8562000898565b83018262000996565b50505b505050565b60008160020a8304905092915050565b600062000a306000198460080262000a0d565b1980831691505092915050565b600062000a4b838362000a1d565b9150826002028217905092915050565b62000a668262000814565b67ffffffffffffffff81111562000a825762000a81620004b5565b5b62000a8e82546200084e565b62000a9b828285620009bd565b600060209050601f83116001811462000ad3576000841562000abe578287015190505b62000aca858262000a3d565b86555062000b3a565b601f19841662000ae38662000883565b60005b8281101562000b0d5784890151825560018201915060208501945060208101905062000ae6565b8683101562000b2d578489015162000b29601f89168262000a1d565b8355505b6001600288020188555050505b505050505050565b600062000b4f8262000657565b915062000b5c8362000657565b925082820262000b6c8162000657565b915080821462000b815762000b806200040c565b5b5092915050565b60805160a05160c05160e05161388962000c0160003960008181610eb9015261119c01526000818161170001528181611dbe0152818161236b015261250801526000818161172c01528181612529015261256e0152600081816118060152818161183e015281816118b6015261234701526138896000f3fe608060405234801561001057600080fd5b50600436106102d8576000357c010000000000000000000000000000000000000000000000000000000090048063731f237c1161019f578063a9059cbb11610106578063d397de60116100bf578063eda4e6d611610099578063eda4e6d6146109bf578063f2fde38b146109dd578063f83da35d14610a0d578063f84e521314610a3d576102d8565b8063d397de6014610953578063d89135cd14610983578063e8095295146109a1576102d8565b8063a9059cbb14610869578063ab28cea014610899578063b470aade146108b7578063c0ab7077146108d5578063c7a7f89a14610905578063d340ef8a14610935576102d8565b80638f0b2d5d116101585780638f0b2d5d146107815780638f1df6bc1461079d578063936d9e7a146107bb57806395d89b41146107eb578063983b2d5614610809578063a457c2d714610839576102d8565b8063731f237c146106cd57806373f42561146106eb57806374bedb951461070957806379ba50971461072757806384dde4af146107455780638da5cb5b14610763576102d8565b806340452d911161024357806351b4541c116101fc57806351b4541c146105bf57806358b2833b146105ef5780636721d4ef1461060d5780636787a9be1461063d5780636a2d094e1461066d57806370a082311461069d576102d8565b806340452d91146104b157806342966c68146104e3578063449a52f8146104ff57806347a505171461052f5780634abfbba21461055f5780634d0df4fd1461058f576102d8565b8063229ba19711610295578063229ba197146103b557806323b872dd146103d35780633092afd5146104035780633133348714610433578063313ce567146104635780633950935114610481576102d8565b806301ffc9a7146102dd57806306fdde031461030d578063095ea7b31461032b57806309f28f3c1461035b57806318160ddd146103795780631989c6a814610397575b600080fd5b6102f760048036038101906102f29190612d7b565b610a6d565b6040516103049190612dc3565b60405180910390f35b610315610c13565b6040516103229190612e6e565b60405180910390f35b61034560048036038101906103409190612f24565b610ca1565b6040516103529190612dc3565b60405180910390f35b610363610e72565b6040516103709190612f8f565b60405180910390f35b610381610e94565b60405161038e9190612fb9565b60405180910390f35b61039f610eab565b6040516103ac9190612fb9565b60405180910390f35b6103bd610eb7565b6040516103ca9190612fb9565b60405180910390f35b6103ed60048036038101906103e89190612fd4565b610edb565b6040516103fa9190612dc3565b60405180910390f35b61041d60048036038101906104189190613027565b61108e565b60405161042a9190612dc3565b60405180910390f35b61044d60048036038101906104489190613054565b611181565b60405161045a9190612fb9565b60405180910390f35b61046b611235565b6040516104789190612fb9565b60405180910390f35b61049b60048036038101906104969190612f24565b61123b565b6040516104a89190612dc3565b60405180910390f35b6104cb60048036038101906104c69190613094565b6113d1565b6040516104da9392919061312c565b60405180910390f35b6104fd60048036038101906104f89190613094565b611445565b005b61051960048036038101906105149190612f24565b611573565b6040516105269190612dc3565b60405180910390f35b61054960048036038101906105449190613027565b6116b3565b6040516105569190612fb9565b60405180910390f35b61057960048036038101906105749190613094565b6116fc565b6040516105869190612fb9565b60405180910390f35b6105a960048036038101906105a491906132cb565b61175c565b6040516105b69190612dc3565b60405180910390f35b6105d960048036038101906105d49190613094565b6117c9565b6040516105e69190612fb9565b60405180910390f35b6105f76117ea565b6040516106049190612fb9565b60405180910390f35b61062760048036038101906106229190613054565b6117f0565b6040516106349190612fb9565b60405180910390f35b61065760048036038101906106529190613094565b611871565b6040516106649190612fb9565b60405180910390f35b61068760048036038101906106829190613094565b6118f1565b6040516106949190612fb9565b60405180910390f35b6106b760048036038101906106b29190613027565b611912565b6040516106c49190612fb9565b60405180910390f35b6106d56119ca565b6040516106e29190612dc3565b60405180910390f35b6106f36119db565b6040516107009190612fb9565b60405180910390f35b6107116119e1565b60405161071e9190612fb9565b60405180910390f35b61072f6119e7565b60405161073c9190612dc3565b60405180910390f35b61074d611b8e565b60405161075a9190613307565b60405180910390f35b61076b611bb4565b6040516107789190613307565b60405180910390f35b61079b60048036038101906107969190613027565b611bda565b005b6107a5611c78565b6040516107b29190612dc3565b60405180910390f35b6107d560048036038101906107d091906132cb565b611f17565b6040516107e29190612fb9565b60405180910390f35b6107f3611f45565b6040516108009190612e6e565b60405180910390f35b610823600480360381019061081e9190613027565b611fd3565b6040516108309190612dc3565b60405180910390f35b610853600480360381019061084e9190612f24565b612090565b6040516108609190612dc3565b60405180910390f35b610883600480360381019061087e9190612f24565b6122af565b6040516108909190612dc3565b60405180910390f35b6108a1612345565b6040516108ae9190612fb9565b60405180910390f35b6108bf612369565b6040516108cc9190612fb9565b60405180910390f35b6108ef60048036038101906108ea9190613094565b61238d565b6040516108fc9190612dc3565b60405180910390f35b61091f600480360381019061091a91906132cb565b6124c5565b60405161092c9190612fb9565b60405180910390f35b61093d6124de565b60405161094a9190612fb9565b60405180910390f35b61096d600480360381019061096891906132cb565b6124e4565b60405161097a9190612fb9565b60405180910390f35b61098b6124f8565b6040516109989190612fb9565b60405180910390f35b6109a9612502565b6040516109b69190612f8f565b60405180910390f35b6109c761256c565b6040516109d49190612fb9565b60405180910390f35b6109f760048036038101906109f29190613027565b612590565b604051610a049190612dc3565b60405180910390f35b610a276004803603810190610a229190613322565b612632565b604051610a3491906133f8565b60405180910390f35b610a576004803603810190610a5291906132cb565b6126b2565b604051610a649190612fb9565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ac15760019050610c0e565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b135760019050610c0e565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b655760019050610c0e565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bb75760019050610c0e565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c095760019050610c0e565b600090505b919050565b60068054610c2090613442565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4c90613442565b8015610c995780601f10610c6e57610100808354040283529160200191610c99565b820191906000526020600020905b815481529060010190602001808311610c7c57829003601f168201915b505050505081565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d6d5760008314610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d63906134bf565b60405180910390fd5b5b610d75611c78565b50610d7f83611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610e5f9190612fb9565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600c54600954610ea6919061350e565b905090565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610ee8611c78565b50610ef284611871565b915081600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f7d57600080fd5b81600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611009919061350e565b9250508190555061101b8686846126cf565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161107a9190612fb9565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061111757503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61112057600080fd5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f00000000000000000000000000000000000000000000000000000000000000006111c59190613571565b905060005b8481101561120e5764e8d4a5100082846111e491906135a2565b6111ee9190613571565b836111f9919061350e565b92508080611206906135e4565b9150506111ca565b5064e8d4a51000858361122191906135a2565b61122b9190613571565b9250505092915050565b60085481565b600080611246611c78565b5061125083611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112de919061362c565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516113be9190612fb9565b60405180910390a3600191505092915050565b600081815481106113e157600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a90046cffffffffffffffffffffffffff16905083565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149b57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156114e757600080fd5b60006114f282611871565b90506114fc6119ca565b5061150733826126f4565b5081600c600082825461151a919061362c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516115679190612fb9565b60405180910390a25050565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906136ac565b60405180910390fd5b61160a611c78565b5061161483611871565b90508260096000828254611628919061362c565b9250508190555061163984826127fb565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516116979190612fb9565b60405180910390a36116a76128bf565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261172a91906135a2565b7f0000000000000000000000000000000000000000000000000000000000000000611755919061362c565b9050919050565b600080826000015163ffffffff16111561177957600090506117c4565b6000826020015168ffffffffffffffffff16111561179a57600090506117c4565b600082604001516cffffffffffffffffffffffffff1611156117bf57600090506117c4565b600190505b919050565b6000603c82426117d9919061350e565b6117e39190613571565b9050919050565b60035481565b6000806402540be4008361180491906135a2565b7f000000000000000000000000000000000000000000000000000000000000000061182f919061350e565b8461183a91906135a2565b90507f0000000000000000000000000000000000000000000000000000000000000000816118689190613571565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166118a291906136cc565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836118e091906135a2565b6118ea9190613571565b9050919050565b6000603c8242611901919061350e565b61190b9190613571565b9050919050565b600080600080611921856116b3565b925061192e6003546117c9565b905061197a6402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661196291906136cc565b6fffffffffffffffffffffffffffffffff1682611181565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006119aa91906135a2565b82846119b691906135a2565b6119c09190613571565b9350505050919050565b60006119d6600061238d565b905090565b600c5481565b600b5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3457600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c82612cd3565b611c8a612cd3565b611c92612cd3565b6000806000806000611ca26119ca565b50611cab612a9c565b9750611cb68861175c565b15611ccc57600098505050505050505050611f14565b6000600a5481548110611ce257611ce1613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815250509550611d9e886124e4565b9450600185611dad919061362c565b9050611db8866126b2565b9350603c7f0000000000000000000000000000000000000000000000000000000000000000611de79190613571565b9150611df38483611181565b9250611e09600084611e03610e94565b84612632565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff1602179055505050611ecf87612c41565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611eff9190612fb9565b60405180910390a16001985050505050505050505b90565b6000806000611f25846124c5565b9150611f30846126b2565b9050611f3c82826117f0565b92505050919050565b60078054611f5290613442565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e90613442565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461202f57600080fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008061209c83611871565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561212757600080fd5b61212f611c78565b5080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bc919061350e565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161229c9190612fb9565b60405180910390a3600191505092915050565b60008060006122bc611c78565b506122c684611871565b91506122d33386846126cf565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516123329190612fb9565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600061239d6003546117c9565b9150600082036123b2576000925050506124c0565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000841180156123f457508184105b156123fd578391505b6124078183611181565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c8261244c91906135a2565b600354612459919061362c565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff166040516124b19190613773565b60405180910390a46001925050505b919050565b6000816020015168ffffffffffffffffff169050919050565b600a5481565b6000816000015163ffffffff169050919050565b6000600c54905090565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612553919061350e565b61255d9190613571565b612567919061362c565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ec57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b61263a612cd3565b612642612cd3565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff16815250508481604001906cffffffffffffffffffffffffff1690816cffffffffffffffffffffffffff168152505080915050949350505050565b600081604001516cffffffffffffffffffffffffff169050919050565b6000806126dc85846126f4565b506126e784846127fb565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361275057600093505050506127f5565b612759866116b3565b92508483101561279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906137da565b60405180910390fd5b84836127aa919061350e565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361285757600093505050506128b9565b612860866116b3565b9250848361286e919061362c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006128c9612cd3565b60006128d3610e94565b9050600060016000805490506128e9919061350e565b815481106128fa576128f9613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506129e4919061350e565b815481106129f5576129f4613709565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff16021790555090505060019250505090565b612aa4612cd3565b612aac612cd3565b612ab4612cd3565b600080600a5481548110612acb57612aca613709565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c099190613826565b6fffffffffffffffffffffffffffffffff169050612c26836124e4565b8111612c3757819350505050612c3e565b8293505050505b90565b6000806000612c4f84611f17565b9150600b54612c5d83611871565b612c67919061350e565b9050612c95600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127fb565b506001600a6000828254612ca9919061362c565b9250508190555080600b6000828254612cc2919061362c565b925050819055508192505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff16815260200160006cffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d5881612d23565b8114612d6357600080fd5b50565b600081359050612d7581612d4f565b92915050565b600060208284031215612d9157612d90612d1e565b5b6000612d9f84828501612d66565b91505092915050565b60008115159050919050565b612dbd81612da8565b82525050565b6000602082019050612dd86000830184612db4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e18578082015181840152602081019050612dfd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e4082612dde565b612e4a8185612de9565b9350612e5a818560208601612dfa565b612e6381612e24565b840191505092915050565b60006020820190508181036000830152612e888184612e35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ebb82612e90565b9050919050565b612ecb81612eb0565b8114612ed657600080fd5b50565b600081359050612ee881612ec2565b92915050565b6000819050919050565b612f0181612eee565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612d1e565b5b6000612f4985828601612ed9565b9250506020612f5a85828601612f0f565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612f8981612f64565b82525050565b6000602082019050612fa46000830184612f80565b92915050565b612fb381612eee565b82525050565b6000602082019050612fce6000830184612faa565b92915050565b600080600060608486031215612fed57612fec612d1e565b5b6000612ffb86828701612ed9565b935050602061300c86828701612ed9565b925050604061301d86828701612f0f565b9150509250925092565b60006020828403121561303d5761303c612d1e565b5b600061304b84828501612ed9565b91505092915050565b6000806040838503121561306b5761306a612d1e565b5b600061307985828601612f0f565b925050602061308a85828601612f0f565b9150509250929050565b6000602082840312156130aa576130a9612d1e565b5b60006130b884828501612f0f565b91505092915050565b600063ffffffff82169050919050565b6130da816130c1565b82525050565b600068ffffffffffffffffff82169050919050565b6130fe816130e0565b82525050565b60006cffffffffffffffffffffffffff82169050919050565b61312681613104565b82525050565b600060608201905061314160008301866130d1565b61314e60208301856130f5565b61315b604083018461311d565b949350505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131a082612e24565b810181811067ffffffffffffffff821117156131bf576131be613168565b5b80604052505050565b60006131d2612d14565b90506131de8282613197565b919050565b6131ec816130c1565b81146131f757600080fd5b50565b600081359050613209816131e3565b92915050565b613218816130e0565b811461322357600080fd5b50565b6000813590506132358161320f565b92915050565b61324481613104565b811461324f57600080fd5b50565b6000813590506132618161323b565b92915050565b60006060828403121561327d5761327c613163565b5b61328760606131c8565b90506000613297848285016131fa565b60008301525060206132ab84828501613226565b60208301525060406132bf84828501613252565b60408301525092915050565b6000606082840312156132e1576132e0612d1e565b5b60006132ef84828501613267565b91505092915050565b61330181612eb0565b82525050565b600060208201905061331c60008301846132f8565b92915050565b6000806000806080858703121561333c5761333b612d1e565b5b600061334a87828801612f0f565b945050602061335b87828801612f0f565b935050604061336c87828801612f0f565b925050606061337d87828801612f0f565b91505092959194509250565b613392816130c1565b82525050565b6133a1816130e0565b82525050565b6133b081613104565b82525050565b6060820160008201516133cc6000850182613389565b5060208201516133df6020850182613398565b5060408201516133f260408501826133a7565b50505050565b600060608201905061340d60008301846133b6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345a57607f821691505b60208210810361346d5761346c613413565b5b50919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b60006134a9600a83612de9565b91506134b482613473565b602082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351982612eee565b915061352483612eee565b925082820390508181111561353c5761353b6134df565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061357c82612eee565b915061358783612eee565b92508261359757613596613542565b5b828204905092915050565b60006135ad82612eee565b91506135b883612eee565b92508282026135c681612eee565b915082820484148315176135dd576135dc6134df565b5b5092915050565b60006135ef82612eee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613621576136206134df565b5b600182019050919050565b600061363782612eee565b915061364283612eee565b925082820190508082111561365a576136596134df565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000613696600a83612de9565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b60006136d782612f64565b91506136e283612f64565b92508282026136f081612f64565b9150808214613702576137016134df565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061375d61375861375384612f64565b613738565b612eee565b9050919050565b61376d81613742565b82525050565b60006020820190506137886000830184613764565b92915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b60006137c4600d83612de9565b91506137cf8261378e565b602082019050919050565b600060208201905081810360008301526137f3816137b7565b9050919050565b61380381612f64565b811461380e57600080fd5b50565b600081519050613820816137fa565b92915050565b60006020828403121561383c5761383b612d1e565b5b600061384a84828501613811565b9150509291505056fea264697066735822122008caebcd04cc1bb42095504e6580d634464818fdc889058130c22a47ada837f064736f6c63430008110033 +\ No newline at end of file diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol @@ -10,15 +10,6 @@ contract DemurrageTokenSingleCap { uint104 demurrage; } redistributionItem[] public redistributions; // uint51(unused) | uint64(demurrageModifier) | uint36(participants) | uint72(value) | uint32(period) - // Redistribution bit field, with associated shifts and masks - // (Uses sub-byte boundaries) -// bytes32[] public redistributions; // uint51(unused) | uint64(demurrageModifier) | uint36(participants) | uint72(value) | uint32(period) -// uint8 constant shiftRedistributionPeriod = 0; -// uint256 constant maskRedistributionPeriod = 0x00000000000000000000000000000000000000000000000000000000ffffffff; // (1 << 32) - 1 -// uint8 constant shiftRedistributionValue = 32; -// uint256 constant maskRedistributionValue = 0x00000000000000000000000000000000000000ffffffffffffffffff00000000; // ((1 << 72) - 1) << 32 -// uint8 constant shiftRedistributionDemurrage = 104; -// uint256 constant maskRedistributionDemurrage = 0x0000000000ffffffffffffffffffffffffffff00000000000000000000000000; // ((1 << 36) - 1) << 140 // Account balances mapping (address => uint256) account; @@ -229,16 +220,6 @@ contract DemurrageTokenSingleCap { } // Deserializes the redistribution word - // uint95(unused) | uint20(demurrageModifier) | uint36(participants) | uint72(value) | uint32(period) -// function toRedistribution(uint256 _participants, uint256 _demurrageModifierPpm, uint256 _value, uint256 _period) public pure returns(bytes32) { -// bytes32 redistribution; -// -// redistribution |= bytes32((_demurrageModifierPpm << shiftRedistributionDemurrage) & maskRedistributionDemurrage); -// redistribution |= bytes32((_value << shiftRedistributionValue) & maskRedistributionValue); -// redistribution |= bytes32(_period & maskRedistributionPeriod); -// return redistribution; -// } - function toRedistribution(uint256 _participants, uint256 _demurrageModifierPpm, uint256 _value, uint256 _period) public pure returns(redistributionItem memory) { redistributionItem memory redistribution; @@ -248,32 +229,18 @@ contract DemurrageTokenSingleCap { return redistribution; } -// -// // Serializes the demurrage period part of the redistribution word -// function toRedistributionPeriod(bytes32 redistribution) public pure returns (uint256) { -// return uint256(redistribution) & maskRedistributionPeriod; -// } -// + // Serializes the demurrage period part of the redistribution word function toRedistributionPeriod(redistributionItem memory _redistribution) public pure returns (uint256) { return uint256(_redistribution.period); } -// // Serializes the supply part of the redistribution word -// function toRedistributionSupply(bytes32 redistribution) public pure returns (uint256) { -// return (uint256(redistribution) & kkRedistributionValue) >> shiftRedistributionValue; -// } - + // Serializes the supply part of the redistribution word function toRedistributionSupply(redistributionItem memory _redistribution) public pure returns (uint256) { return uint256(_redistribution.value); } -// -// // Serializes the number of participants part of the redistribution word -// function toRedistributionDemurrageModifier(bytes32 redistribution) public pure returns (uint256) { -// return (uint256(redistribution) & maskRedistributionDemurrage) >> shiftRedistributionDemurrage; -// } - + // Serializes the number of participants part of the redistribution word function toRedistributionDemurrageModifier(redistributionItem memory _redistribution) public pure returns (uint256) { return uint256(_redistribution.demurrage); } @@ -283,20 +250,8 @@ contract DemurrageTokenSingleCap { function redistributionCount() public view returns (uint256) { return redistributions.length; } -// -// // Save the current total supply amount to the current redistribution period -// function saveRedistributionSupply() private returns (bool) { -// uint256 currentRedistribution; -// uint256 grownSupply; -// -// grownSupply = totalSupply(); -// currentRedistribution = uint256(redistributions[redistributions.length-1]); -// currentRedistribution &= (~maskRedistributionValue); -// currentRedistribution |= (grownSupply << shiftRedistributionValue); -// -// redistributions[redistributions.length-1] = bytes32(currentRedistribution); -// return true; -// } + + // Save the current total supply amount to the current redistribution period function saveRedistributionSupply() private returns (bool) { redistributionItem memory currentRedistribution; uint256 grownSupply; diff --git a/solidity/Makefile b/solidity/Makefile @@ -1,6 +1,6 @@ SOLC = /usr/bin/solc -all: multi single +all: single_nocap multi_nocap: $(SOLC) DemurrageTokenMultiNocap.sol --abi --evm-version byzantium | awk 'NR>3' > DemurrageTokenMultiNocap.json @@ -33,6 +33,7 @@ test: all python ../python/tests/test_pure.py install: all - cp -v DemurrageToken*.{json,bin} ../python/erc20_demurrage_token/data/ + cp -v DemurrageToken*.json ../python/erc20_demurrage_token/data/ + cp -v DemurrageToken*.bin ../python/erc20_demurrage_token/data/ .PHONY: test install