commit 8c09ff266e5b321478b6b861ad3c6bb8b06cfcb3
parent a40385a5a0dee5361ebddac1c4c86ac3111cbe18
Author: lash <dev@holbrook.no>
Date: Thu, 15 Aug 2024 12:36:25 +0100
Prevent non-owner from changing seal, bump deps
Diffstat:
7 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/python/CHANGELOG b/python/CHANGELOG
@@ -1,3 +1,5 @@
+- 0.5.6
+ * Truncate approve maxuint value to tolerable value for contract.
- 0.5.5
* Make allowance method public
- 0.5.4
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin
@@ -1 +1 @@
-6101006040523480156200001257600080fd5b506040516200664338038062006643833981810160405281019062000038919062000859565b6801000000000000000083600f0b126200005157600080fd5b6200005b6200056e565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b7a565b508560079081620000bf919062000b7a565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c90565b60c081815250506200010d60016200029f640100000000026401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016284620002c6640100000000026401000000009004565b600f0b60e081600f0b815250506200019e6000600260009054906101000a9004600f0b600060016200031a640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000cdb565b6000677fffffffffffffff821115620002b757600080fd5b6040829060020a029050919050565b60008082600f0b13620002d857600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af62000305846200039e640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b620003246200056e565b6200032e6200056e565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003b057600080fd5b60008083600f0b9050680100000000000000008112620003ec576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126200041b576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000448576010819060008212600003808260020a82851804189250505090506010820191505b610100811262000474576008819060008212600003808260020a82851804189250505090506008820191505b601081126200049f576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004ca576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004da576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b600081131562000561578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000507565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061382620005c8565b810181811067ffffffffffffffff82111715620006355762000634620005d9565b5b80604052505050565b60006200064a620005aa565b905062000658828262000608565b919050565b600067ffffffffffffffff8211156200067b576200067a620005d9565b5b6200068682620005c8565b9050602081019050919050565b60005b83811015620006b357808201518184015260208101905062000696565b60008484015250505050565b6000620006d6620006d0846200065d565b6200063e565b905082815260208101848484011115620006f557620006f4620005c3565b5b6200070284828562000693565b509392505050565b600082601f830112620007225762000721620005be565b5b815162000734848260208601620006bf565b91505092915050565b600060ff82169050919050565b62000755816200073d565b81146200076157600080fd5b50565b60008151905062000775816200074a565b92915050565b600081600f0b9050919050565b62000793816200077b565b81146200079f57600080fd5b50565b600081519050620007b38162000788565b92915050565b6000819050919050565b620007ce81620007b9565b8114620007da57600080fd5b50565b600081519050620007ee81620007c3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082182620007f4565b9050919050565b620008338162000814565b81146200083f57600080fd5b50565b600081519050620008538162000828565b92915050565b60008060008060008060c08789031215620008795762000878620005b4565b5b600087015167ffffffffffffffff8111156200089a5762000899620005b9565b5b620008a889828a016200070a565b965050602087015167ffffffffffffffff811115620008cc57620008cb620005b9565b5b620008da89828a016200070a565b9550506040620008ed89828a0162000764565b94505060606200090089828a01620007a2565b93505060806200091389828a01620007dd565b92505060a06200092689828a0162000842565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098657607f821691505b6020821081036200099c576200099b6200093e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c7565b62000a158683620009c7565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a5862000a5262000a4c84620007b9565b62000a2d565b620007b9565b9050919050565b6000819050919050565b62000a748362000a37565b62000a8c62000a838262000a5f565b848454620009d7565b825550505050565b600090565b62000aa362000a94565b62000ab081848462000a69565b505050565b5b8181101562000ad85762000acc60008262000a99565b60018101905062000ab6565b5050565b601f82111562000b275762000af181620009a2565b62000afc84620009b7565b8101602085101562000b0c578190505b62000b2462000b1b85620009b7565b83018262000ab5565b50505b505050565b60008160020a8304905092915050565b600062000b4f6000198460080262000b2c565b1980831691505092915050565b600062000b6a838362000b3c565b9150826002028217905092915050565b62000b858262000933565b67ffffffffffffffff81111562000ba15762000ba0620005d9565b5b62000bad82546200096d565b62000bba82828562000adc565b600060209050601f83116001811462000bf2576000841562000bdd578287015190505b62000be9858262000b5c565b86555062000c59565b601f19841662000c0286620009a2565b60005b8281101562000c2c5784890151825560018201915060208501945060208101905062000c05565b8683101562000c4c578489015162000c48601f89168262000b3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9d82620007b9565b915062000caa83620007b9565b925082820262000cba81620007b9565b9150828204841483151762000cd45762000cd362000c61565b5b5092915050565b60805160a05160c05160e0516158e862000d5b60003960008181611909015281816127f4015281816129e10152612ddd015260008181612056015281816127b701528181612d3501528181612f7a01526131c701526000818161208201528181612fa6015281816131e8015261322d0152600061196701526158e86000f3fe608060405234801561001057600080fd5b50600436106103e2576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e1161021c578063a457c2d711610137578063d89135cd116100ca578063e69571af11610099578063e69571af14610ce3578063e809529514610d13578063eda4e6d614610d31578063f2fde38b14610d4f576103e2565b8063d89135cd14610c35578063da2824a814610c53578063dd62ed3e14610c83578063e54063a614610cb3576103e2565b8063c0ab707711610106578063c0ab707714610bad578063d340ef8a14610bdd578063d5abeb0114610bfb578063d7a52fa914610c19576103e2565b8063a457c2d714610b11578063a9059cbb14610b41578063b1cb0db314610b71578063b470aade14610b8f576103e2565b80638832e6e3116101af57806394d008ef1161017e57806394d008ef14610a9b57806395d89b4114610ab75780639f24880814610ad5578063a2309ff814610af3576103e2565b80638832e6e314610a275780638da5cb5b14610a435780638f0b2d5d14610a615780638f1df6bc14610a7d576103e2565b80637445e33a116101eb5780637445e33a1461098b57806374bedb95146109bb57806384dde4af146109d957806386fe212d146109f7576103e2565b80636a2d094e146108f15780636f8b44b01461092157806370a082311461093d578063731f237c1461096d576103e2565b8063313334871161030c57806344df8e701161029f57806358b2833b1161026e57806358b2833b146108555780635ae06f7e146108735780635f408c04146108a35780636787a9be146108c1576103e2565b806344df8e70146107a757806347a50517146107c55780634abfbba2146107f557806351b4541c14610825576103e2565b806340452d91116102db57806340452d91146106f957806342966c681461072b578063449a52f81461075b57806344d171871461078b576103e2565b8063313334871461065d578063313ce5671461068d57806331a5995d146106ab57806339509351146106c9576103e2565b806318cbbcfc1161038457806323b872dd1161035357806323b872dd1461059d5780632a7aec09146105cd5780632b29ba23146105fd5780632c1758c11461062d576103e2565b806318cbbcfc146105015780631989c6a81461051f578063213d1e1e1461053d57806323a859441461056d576103e2565b8063095ea7b3116103c0578063095ea7b31461046557806309f28f3c1461049557806311c56615146104b357806318160ddd146104e3576103e2565b806301681a62146103e757806301ffc9a71461041757806306fdde0314610447575b600080fd5b61040160048036038101906103fc9190614b1d565b610d7f565b60405161040e9190614b63565b60405180910390f35b610431600480360381019061042c9190614bd6565b610ecd565b60405161043e9190614c1e565b60405180910390f35b61044f6111bb565b60405161045c9190614cc9565b60405180910390f35b61047f600480360381019061047a9190614d17565b611249565b60405161048c9190614c1e565b60405180910390f35b61049d6114a5565b6040516104aa9190614d73565b60405180910390f35b6104cd60048036038101906104c89190614dba565b6114b8565b6040516104da9190614b63565b60405180910390f35b6104eb611508565b6040516104f89190614b63565b60405180910390f35b61050961151f565b6040516105169190614b63565b60405180910390f35b610527611524565b6040516105349190614b63565b60405180910390f35b61055760048036038101906105529190614f9b565b611530565b6040516105649190614b63565b60405180910390f35b61058760048036038101906105829190614f9b565b611549565b6040516105949190614c1e565b60405180910390f35b6105b760048036038101906105b29190614fc8565b6115b1565b6040516105c49190614c1e565b60405180910390f35b6105e760048036038101906105e29190614f9b565b6117cf565b6040516105f49190614d73565b60405180910390f35b61061760048036038101906106129190614b1d565b611807565b6040516106249190614c1e565b60405180910390f35b6106476004803603810190610642919061501b565b6118b5565b6040516106549190614c1e565b60405180910390f35b61067760048036038101906106729190615048565b6118e8565b6040516106849190614b63565b60405180910390f35b610695611965565b6040516106a29190614b63565b60405180910390f35b6106b3611989565b6040516106c09190614b63565b60405180910390f35b6106e360048036038101906106de9190614d17565b61198f565b6040516106f09190614c1e565b60405180910390f35b610713600480360381019061070e919061501b565b611b25565b604051610722939291906150b5565b60405180910390f35b6107456004803603810190610740919061501b565b611b94565b6040516107529190614c1e565b60405180910390f35b61077560048036038101906107709190614d17565b611d65565b6040516107829190614c1e565b60405180910390f35b6107a560048036038101906107a09190615151565b611f3c565b005b6107af611fba565b6040516107bc9190614c1e565b60405180910390f35b6107df60048036038101906107da9190614b1d565b612009565b6040516107ec9190614b63565b60405180910390f35b61080f600480360381019061080a919061501b565b612052565b60405161081c9190614b63565b60405180910390f35b61083f600480360381019061083a919061501b565b6120b2565b60405161084c9190614b63565b60405180910390f35b61085d6120d3565b60405161086a9190614b63565b60405180910390f35b61088d60048036038101906108889190614b1d565b6120d9565b60405161089a9190614c1e565b60405180910390f35b6108ab6121e3565b6040516108b891906151e1565b60405180910390f35b6108db60048036038101906108d6919061501b565b6122b0565b6040516108e89190614b63565b60405180910390f35b61090b6004803603810190610906919061501b565b6122f1565b6040516109189190614b63565b60405180910390f35b61093b6004803603810190610936919061501b565b612312565b005b61095760048036038101906109529190614b1d565b6123da565b6040516109649190614b63565b60405180910390f35b610975612441565b6040516109829190614b63565b60405180910390f35b6109a560048036038101906109a09190614f9b565b612452565b6040516109b29190614b63565b60405180910390f35b6109c3612480565b6040516109d09190614b63565b60405180910390f35b6109e1612486565b6040516109ee919061520b565b60405180910390f35b610a116004803603810190610a0c919061501b565b6124ac565b604051610a1e9190614b63565b60405180910390f35b610a416004803603810190610a3c9190615151565b612593565b005b610a4b6125a4565b604051610a58919061520b565b60405180910390f35b610a7b6004803603810190610a769190614b1d565b6125ca565b005b610a8561267f565b604051610a929190614c1e565b60405180910390f35b610ab56004803603810190610ab09190615151565b612940565b005b610abf612951565b604051610acc9190614cc9565b60405180910390f35b610add6129df565b604051610aea9190614d73565b60405180910390f35b610afb612a03565b604051610b089190614b63565b60405180910390f35b610b2b6004803603810190610b269190614d17565b612a0d565b604051610b389190614c1e565b60405180910390f35b610b5b6004803603810190610b569190614d17565b612c2c565b604051610b689190614c1e565b60405180910390f35b610b79612d2d565b604051610b869190614b63565b60405180910390f35b610b97612d33565b604051610ba49190614b63565b60405180910390f35b610bc76004803603810190610bc2919061501b565b612d57565b604051610bd49190614b63565b60405180910390f35b610be5612ede565b604051610bf29190614b63565b60405180910390f35b610c03612ee4565b604051610c109190614b63565b60405180910390f35b610c336004803603810190610c2e919061501b565b612eea565b005b610c3d61302a565b604051610c4a9190614b63565b60405180910390f35b610c6d6004803603810190610c689190614b1d565b613034565b604051610c7a9190614c1e565b60405180910390f35b610c9d6004803603810190610c989190615226565b613108565b604051610caa9190614b63565b60405180910390f35b610ccd6004803603810190610cc89190614f9b565b61312d565b604051610cda9190614b63565b60405180910390f35b610cfd6004803603810190610cf89190615266565b613141565b604051610d0a919061533c565b60405180910390f35b610d1b6131c1565b604051610d289190615382565b60405180910390f35b610d3961322b565b604051610d469190614b63565b60405180910390f35b610d696004803603810190610d649190614b1d565b61324f565b604051610d769190614c1e565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5891906153cc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ebc9190614b63565b60405180910390a380915050919050565b600063b61bc9417c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f2157600190506111b6565b635878bcf47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f7357600190506111b6565b63bc4babdd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610fc557600190506111b6565b630d7491f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361101757600190506111b6565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361106957600190506111b6565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036110bb57600190506111b6565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361110d57600190506111b6565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361115f57600190506111b6565b63d00179687c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036111b157600190506111b6565b600090505b919050565b600680546111c89061542f565b80601f01602080910402602001604051908101604052809291908181526020018280546111f49061542f565b80156112415780601f1061121657610100808354040283529160200191611241565b820191906000526020600020905b81548152906001019060200180831161122457829003601f168201915b505050505081565b60008060006112566121e3565b905060028160ff160361126e5760009250505061149f565b60008160ff1611156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906154ac565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561137e576000841461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490615518565b60405180910390fd5b5b61138661267f565b5067800000000000000084116113a65761139f846122b0565b91506113b2565b67800000000000000091505b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516114909190614b63565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806114df6114c785613398565b6114da6114d46001613398565b866133be565b613425565b90506114ea816134a4565b67ffffffffffffffff16846114ff9190615538565b91505092915050565b6000600b5460085461151a9190615538565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b600080826000015163ffffffff16111561156657600090506115ac565b6000826020015168ffffffffffffffffff16111561158757600090506115ac565b6000826040015167ffffffffffffffff1611156115a757600090506115ac565b600190505b919050565b6000806000806115bf6121e3565b905060028160ff16036115d857600093505050506117c8565b60008160ff16111561161f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611616906154ac565b60405180910390fd5b61162761267f565b50611631856122b0565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116bc57600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117489190615538565b9250508190555061175a8787856134d9565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516117b99190614b63565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036117fe576117fb6001613398565b90505b80915050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118ae5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000600f82106118c457600080fd5b600082036118d957600f6012541490506118e3565b8160125483161490505b919050565b6000806000806118f786613398565b925061190285613398565b915061192e7f000000000000000000000000000000000000000000000000000000000000000083613425565b9050611939816134fc565b90506119458382613425565b9050611950816134a4565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b60008061199a61267f565b506119a4836122b0565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3291906153cc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611b129190614b63565b60405180910390a3600191505092915050565b60008181548110611b3557600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b600080611b9f6121e3565b60ff1614611bac57600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c515750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906155b8565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611cdc57600080fd5b6000611ce7836122b0565b9050611cf33382613589565b5082600b6000828254611d0691906153cc565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca584604051611d539190614b63565b60405180910390a26001915050919050565b6000806000611d726121e3565b60ff1614611d7f57600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e245750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a906155b8565b60405180910390fd5b611e6b61267f565b5060006011541115611e945760115483600854611e8891906153cc565b1115611e9357600080fd5b5b8260086000828254611ea691906153cc565b92505081905550611eb6836122b0565b9050611ec2848261368d565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611f209190614b63565b60405180910390a3611f3061374e565b50600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190615624565b60405180910390fd5b611fb383611b94565b5050505050565b6000612004600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b94565b905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826120809190615644565b7f00000000000000000000000000000000000000000000000000000000000000006120ab91906153cc565b9050919050565b6000603c82426120c29190615538565b6120cc91906156b5565b9050919050565b60035481565b60006120e8600160ff166118b5565b156120f257600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061217957503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61218257600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601060009054906101000a900460ff161561220357600190506122ad565b6000600f540361221657600090506122ad565b600f5442106122a857612243603c60035461223191906156b5565b600f5461223e9190615538565b612d57565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe94260405161228e9190614b63565b60405180910390a161229e61267f565b50600290506122ad565b600090505b90565b6000806122d46122bf84613398565b600260009054906101000a9004600f0b613912565b90506122df816134a4565b67ffffffffffffffff16915050919050565b6000603c82426123019190615538565b61230b91906156b5565b9050919050565b61231f600860ff166118b5565b1561232957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461238357600080fd5b61238b611508565b811161239657600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe6826040516123c89190614b63565b60405180910390a28060118190555050565b6000806000806123f16123ec86612009565b613398565b92506123fe6003546120b2565b905061241983600260009054906101000a9004600f0b613425565b9150612437612427836134a4565b67ffffffffffffffff16826118e8565b9350505050919050565b600061244d6000612d57565b905090565b600080600061246084611530565b915061246b846117cf565b905061247782826114b8565b92505050919050565b600a5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601082106124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e890615732565b60405180910390fd5b6000601254831614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f9061579e565b60405180910390fd5b81601260008282541792505081905550600f6012541415157f6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e6012546040516125819190614b63565b60405180910390a26012549050919050565b61259d8484611d65565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125d7600260ff166118b5565b156125e157600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263b57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612689614a6f565b612691614a6f565b612699614a6f565b60008060008060006126a9612441565b506126b261399e565b97506126bd88611549565b156126d35760009850505050505050505061293d565b6000600954815481106126e9576126e86157be565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505095506127968861312d565b94506001856127a591906153cc565b90506127b0866117cf565b9350603c857f00000000000000000000000000000000000000000000000000000000000000006127e09190615644565b6127ea91906156b5565b91506128266128217f000000000000000000000000000000000000000000000000000000000000000061281c85613398565b613425565b6134fc565b925061283c600084612836611508565b84613141565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506128f887613b34565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516129289190614b63565b60405180910390a16001985050505050505050505b90565b61294a8484611d65565b5050505050565b6007805461295e9061542f565b80601f016020809104026020016040519081016040528092919081815260200182805461298a9061542f565b80156129d75780601f106129ac576101008083540402835291602001916129d7565b820191906000526020600020905b8154815290600101906020018083116129ba57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b600080612a19836122b0565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612aa457600080fd5b612aac61267f565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b399190615538565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051612c199190614b63565b60405180910390a3600191505092915050565b600080600080612c3a6121e3565b905060028160ff1603612c535760009350505050612d27565b60008160ff161115612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c91906154ac565b60405180910390fd5b612ca261267f565b50612cac856122b0565b9250612cb93387856134d9565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612d189190614b63565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612d81576000945050505050612ed9565b612d8c6003546120b2565b925060008303612da3576000945050505050612ed9565b600260009054906101000a9004600f0b9050600086118015612dc457508286105b15612dcd578592505b612dd683613398565b9150612e027f000000000000000000000000000000000000000000000000000000000000000083613425565b9350612e0d846134fc565b9350612e28600260009054906101000a9004600f0b85613425565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612e709190615644565b600354612e7d91906153cc565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612ec99190614d73565b60405180910390a4829450505050505b919050565b60095481565b60115481565b600080612efa600460ff166118b5565b15612f0457600080fd5b601060009054906101000a900460ff1615612f1e57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f7857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000083612fa49190615644565b7f0000000000000000000000000000000000000000000000000000000000000000612fcf91906153cc565b9150600f548211612fdf57600080fd5b600f54905081600f81905550807ff5bd6cb27a0006b5ea8618058a0d84719695cb6d984f4840bc1a54ca12ae4b7c600f5460405161301d9190614b63565b60405180910390a2505050565b6000600b54905090565b6000613043600160ff166118b5565b1561304d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a757600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600d602052816000526040600020602052806000526040600020600091509150505481565b6000816000015163ffffffff169050919050565b613149614a6f565b613151614a6f565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426132129190615538565b61321c91906156b5565b61322691906153cc565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132ac57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001915050919050565b6000677fffffffffffffff8211156133af57600080fd5b6040829060020a029050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561341257506f7fffffffffffffffffffffffffffffff600f0b8113155b61341b57600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561349157506f7fffffffffffffffffffffffffffffff600f0b8113155b61349a57600080fd5b8091505092915050565b60008082600f0b12156134b657600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b60006134e58483613589565b506134f0838361368d565b50600190509392505050565b60006840000000000000000082600f0b1261351657600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b121561354a5760009050613584565b6135816080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a828518041892505050613c53565b90505b919050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600084036135e357600092505050613687565b6135ec85612009565b915083821015613631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362890615839565b60405180910390fd5b838261363d9190615538565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001925050505b92915050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600084036136e757600092505050613748565b6136f085612009565b915083826136fe91906153cc565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001925050505b92915050565b6000613758614a6f565b6000613762611508565b9050600060016000805490506137789190615538565b81548110613789576137886157be565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506138649190615538565b81548110613875576138746157be565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361392357600080fd5b600082600f0b604085600f0b9060020a028161394257613941615686565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561398b57506f7fffffffffffffffffffffffffffffff600f0b8113155b61399457600080fd5b8091505092915050565b6139a6614a6f565b6139ae614a6f565b6139b6614a6f565b600080600954815481106139cd576139cc6157be565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015613ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613afc9190615885565b6fffffffffffffffffffffffffffffffff169050613b198361312d565b8111613b2a57819350505050613b31565b8293505050505b90565b6000806000613b4284612452565b613b4a611508565b613b549190615538565b9150600a54613b62836122b0565b613b6c9190615538565b9050613b9a600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261368d565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d384604051613c0e9190614b63565b60405180910390a3600160096000828254613c2991906153cc565b9250508190555080600a6000828254613c4291906153cc565b925050819055508192505050919050565b60006840000000000000000082600f0b12613c6d57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613ca15760009050614a6a565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315613cef57608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b1315613d285760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613d615760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613d9a57608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613dd35760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613e0c576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613e4557608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613e7e576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613eb657608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613eee5760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613f26576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613f5e5760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613f96576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613fce57608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b13156140065760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b131561403e57608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b13156140755760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b13156140ac576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b13156140e357608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b131561411a576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b131561415157608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b13156141885760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b13156141bf576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b13156141f65760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b131561422c576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b131561426257608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b13156142985760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b13156142ce57608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b13156143045760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b131561433a576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b131561437057608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b13156143a6576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b13156143db57608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156144105760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b1315614445576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b131561447a5760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b13156144af576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b13156144e457608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156145195760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b131561454e57608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156145825760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b13156145b6576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b13156145ea57608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b131561461e576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b131561465257608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156146865760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b13156146ba576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156146ee5760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b1315614721576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b131561475457608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156147875760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b13156147ba57608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156147ed5760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b1315614820576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b131561485357608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b1315614886576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b13156148b857608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156148ea5760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b131561491c576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b131561494e5760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b1315614980576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b13156149b257608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b13156149e45760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b1315614a1657608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b811115614a6557600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614aea82614abf565b9050919050565b614afa81614adf565b8114614b0557600080fd5b50565b600081359050614b1781614af1565b92915050565b600060208284031215614b3357614b32614ab5565b5b6000614b4184828501614b08565b91505092915050565b6000819050919050565b614b5d81614b4a565b82525050565b6000602082019050614b786000830184614b54565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614bb381614b7e565b8114614bbe57600080fd5b50565b600081359050614bd081614baa565b92915050565b600060208284031215614bec57614beb614ab5565b5b6000614bfa84828501614bc1565b91505092915050565b60008115159050919050565b614c1881614c03565b82525050565b6000602082019050614c336000830184614c0f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614c73578082015181840152602081019050614c58565b60008484015250505050565b6000601f19601f8301169050919050565b6000614c9b82614c39565b614ca58185614c44565b9350614cb5818560208601614c55565b614cbe81614c7f565b840191505092915050565b60006020820190508181036000830152614ce38184614c90565b905092915050565b614cf481614b4a565b8114614cff57600080fd5b50565b600081359050614d1181614ceb565b92915050565b60008060408385031215614d2e57614d2d614ab5565b5b6000614d3c85828601614b08565b9250506020614d4d85828601614d02565b9150509250929050565b600081600f0b9050919050565b614d6d81614d57565b82525050565b6000602082019050614d886000830184614d64565b92915050565b614d9781614d57565b8114614da257600080fd5b50565b600081359050614db481614d8e565b92915050565b60008060408385031215614dd157614dd0614ab5565b5b6000614ddf85828601614d02565b9250506020614df085828601614da5565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614e3782614c7f565b810181811067ffffffffffffffff82111715614e5657614e55614dff565b5b80604052505050565b6000614e69614aab565b9050614e758282614e2e565b919050565b600063ffffffff82169050919050565b614e9381614e7a565b8114614e9e57600080fd5b50565b600081359050614eb081614e8a565b92915050565b600068ffffffffffffffffff82169050919050565b614ed481614eb6565b8114614edf57600080fd5b50565b600081359050614ef181614ecb565b92915050565b600067ffffffffffffffff82169050919050565b614f1481614ef7565b8114614f1f57600080fd5b50565b600081359050614f3181614f0b565b92915050565b600060608284031215614f4d57614f4c614dfa565b5b614f576060614e5f565b90506000614f6784828501614ea1565b6000830152506020614f7b84828501614ee2565b6020830152506040614f8f84828501614f22565b60408301525092915050565b600060608284031215614fb157614fb0614ab5565b5b6000614fbf84828501614f37565b91505092915050565b600080600060608486031215614fe157614fe0614ab5565b5b6000614fef86828701614b08565b935050602061500086828701614b08565b925050604061501186828701614d02565b9150509250925092565b60006020828403121561503157615030614ab5565b5b600061503f84828501614d02565b91505092915050565b6000806040838503121561505f5761505e614ab5565b5b600061506d85828601614d02565b925050602061507e85828601614d02565b9150509250929050565b61509181614e7a565b82525050565b6150a081614eb6565b82525050565b6150af81614ef7565b82525050565b60006060820190506150ca6000830186615088565b6150d76020830185615097565b6150e460408301846150a6565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f840112615111576151106150ec565b5b8235905067ffffffffffffffff81111561512e5761512d6150f1565b5b60208301915083600182028301111561514a576151496150f6565b5b9250929050565b6000806000806060858703121561516b5761516a614ab5565b5b600061517987828801614b08565b945050602061518a87828801614d02565b935050604085013567ffffffffffffffff8111156151ab576151aa614aba565b5b6151b7878288016150fb565b925092505092959194509250565b600060ff82169050919050565b6151db816151c5565b82525050565b60006020820190506151f660008301846151d2565b92915050565b61520581614adf565b82525050565b600060208201905061522060008301846151fc565b92915050565b6000806040838503121561523d5761523c614ab5565b5b600061524b85828601614b08565b925050602061525c85828601614b08565b9150509250929050565b600080600080608085870312156152805761527f614ab5565b5b600061528e87828801614d02565b945050602061529f87828801614da5565b93505060406152b087828801614d02565b92505060606152c187828801614d02565b91505092959194509250565b6152d681614e7a565b82525050565b6152e581614eb6565b82525050565b6152f481614ef7565b82525050565b60608201600082015161531060008501826152cd565b50602082015161532360208501826152dc565b50604082015161533660408501826152eb565b50505050565b600060608201905061535160008301846152fa565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61537c81615357565b82525050565b60006020820190506153976000830184615373565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153d782614b4a565b91506153e283614b4a565b92508282019050808211156153fa576153f961539d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061544757607f821691505b60208210810361545a57615459615400565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b6000615496600783614c44565b91506154a182615460565b602082019050919050565b600060208201905081810360008301526154c581615489565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000615502600a83614c44565b915061550d826154cc565b602082019050919050565b60006020820190508181036000830152615531816154f5565b9050919050565b600061554382614b4a565b915061554e83614b4a565b92508282039050818111156155665761556561539d565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006155a2600a83614c44565b91506155ad8261556c565b602082019050919050565b600060208201905081810360008301526155d181615595565b9050919050565b7f4552525f4f4e4c595f53454c465f4255524e0000000000000000000000000000600082015250565b600061560e601283614c44565b9150615619826155d8565b602082019050919050565b6000602082019050818103600083015261563d81615601565b9050919050565b600061564f82614b4a565b915061565a83614b4a565b925082820261566881614b4a565b9150828204841483151761567f5761567e61539d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c082614b4a565b91506156cb83614b4a565b9250826156db576156da615686565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b600061571c601183614c44565b9150615727826156e6565b602082019050919050565b6000602082019050818103600083015261574b8161570f565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b6000615788601283614c44565b915061579382615752565b602082019050919050565b600060208201905081810360008301526157b78161577b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000615823600d83614c44565b915061582e826157ed565b602082019050919050565b6000602082019050818103600083015261585281615816565b9050919050565b61586281615357565b811461586d57600080fd5b50565b60008151905061587f81615859565b92915050565b60006020828403121561589b5761589a614ab5565b5b60006158a984828501615870565b9150509291505056fea2646970667358221220f385dd87c8c69c6c2a499f6ef1b86f025999a2d3537d134331e8146c1db7c54a64736f6c63430008130033
-\ No newline at end of file
+6101006040523480156200001257600080fd5b50604051620066c3380380620066c3833981810160405281019062000038919062000859565b6801000000000000000083600f0b126200005157600080fd5b6200005b6200056e565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b7a565b508560079081620000bf919062000b7a565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c90565b60c081815250506200010d60016200029f640100000000026401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016284620002c6640100000000026401000000009004565b600f0b60e081600f0b815250506200019e6000600260009054906101000a9004600f0b600060016200031a640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000cdb565b6000677fffffffffffffff821115620002b757600080fd5b6040829060020a029050919050565b60008082600f0b13620002d857600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af62000305846200039e640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b620003246200056e565b6200032e6200056e565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003b057600080fd5b60008083600f0b9050680100000000000000008112620003ec576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126200041b576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000448576010819060008212600003808260020a82851804189250505090506010820191505b610100811262000474576008819060008212600003808260020a82851804189250505090506008820191505b601081126200049f576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004ca576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004da576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b600081131562000561578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000507565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061382620005c8565b810181811067ffffffffffffffff82111715620006355762000634620005d9565b5b80604052505050565b60006200064a620005aa565b905062000658828262000608565b919050565b600067ffffffffffffffff8211156200067b576200067a620005d9565b5b6200068682620005c8565b9050602081019050919050565b60005b83811015620006b357808201518184015260208101905062000696565b60008484015250505050565b6000620006d6620006d0846200065d565b6200063e565b905082815260208101848484011115620006f557620006f4620005c3565b5b6200070284828562000693565b509392505050565b600082601f830112620007225762000721620005be565b5b815162000734848260208601620006bf565b91505092915050565b600060ff82169050919050565b62000755816200073d565b81146200076157600080fd5b50565b60008151905062000775816200074a565b92915050565b600081600f0b9050919050565b62000793816200077b565b81146200079f57600080fd5b50565b600081519050620007b38162000788565b92915050565b6000819050919050565b620007ce81620007b9565b8114620007da57600080fd5b50565b600081519050620007ee81620007c3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082182620007f4565b9050919050565b620008338162000814565b81146200083f57600080fd5b50565b600081519050620008538162000828565b92915050565b60008060008060008060c08789031215620008795762000878620005b4565b5b600087015167ffffffffffffffff8111156200089a5762000899620005b9565b5b620008a889828a016200070a565b965050602087015167ffffffffffffffff811115620008cc57620008cb620005b9565b5b620008da89828a016200070a565b9550506040620008ed89828a0162000764565b94505060606200090089828a01620007a2565b93505060806200091389828a01620007dd565b92505060a06200092689828a0162000842565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098657607f821691505b6020821081036200099c576200099b6200093e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c7565b62000a158683620009c7565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a5862000a5262000a4c84620007b9565b62000a2d565b620007b9565b9050919050565b6000819050919050565b62000a748362000a37565b62000a8c62000a838262000a5f565b848454620009d7565b825550505050565b600090565b62000aa362000a94565b62000ab081848462000a69565b505050565b5b8181101562000ad85762000acc60008262000a99565b60018101905062000ab6565b5050565b601f82111562000b275762000af181620009a2565b62000afc84620009b7565b8101602085101562000b0c578190505b62000b2462000b1b85620009b7565b83018262000ab5565b50505b505050565b60008160020a8304905092915050565b600062000b4f6000198460080262000b2c565b1980831691505092915050565b600062000b6a838362000b3c565b9150826002028217905092915050565b62000b858262000933565b67ffffffffffffffff81111562000ba15762000ba0620005d9565b5b62000bad82546200096d565b62000bba82828562000adc565b600060209050601f83116001811462000bf2576000841562000bdd578287015190505b62000be9858262000b5c565b86555062000c59565b601f19841662000c0286620009a2565b60005b8281101562000c2c5784890151825560018201915060208501945060208101905062000c05565b8683101562000c4c578489015162000c48601f89168262000b3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9d82620007b9565b915062000caa83620007b9565b925082820262000cba81620007b9565b9150828204841483151762000cd45762000cd362000c61565b5b5092915050565b60805160a05160c05160e05161596862000d5b600039600081816119090152818161284e01528181612a3b0152612e370152600081816120560152818161281101528181612d8f01528181612fd40152613221015260008181612082015281816130000152818161324201526132870152600061196701526159686000f3fe608060405234801561001057600080fd5b50600436106103e2576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e1161021c578063a457c2d711610137578063d89135cd116100ca578063e69571af11610099578063e69571af14610ce3578063e809529514610d13578063eda4e6d614610d31578063f2fde38b14610d4f576103e2565b8063d89135cd14610c35578063da2824a814610c53578063dd62ed3e14610c83578063e54063a614610cb3576103e2565b8063c0ab707711610106578063c0ab707714610bad578063d340ef8a14610bdd578063d5abeb0114610bfb578063d7a52fa914610c19576103e2565b8063a457c2d714610b11578063a9059cbb14610b41578063b1cb0db314610b71578063b470aade14610b8f576103e2565b80638832e6e3116101af57806394d008ef1161017e57806394d008ef14610a9b57806395d89b4114610ab75780639f24880814610ad5578063a2309ff814610af3576103e2565b80638832e6e314610a275780638da5cb5b14610a435780638f0b2d5d14610a615780638f1df6bc14610a7d576103e2565b80637445e33a116101eb5780637445e33a1461098b57806374bedb95146109bb57806384dde4af146109d957806386fe212d146109f7576103e2565b80636a2d094e146108f15780636f8b44b01461092157806370a082311461093d578063731f237c1461096d576103e2565b8063313334871161030c57806344df8e701161029f57806358b2833b1161026e57806358b2833b146108555780635ae06f7e146108735780635f408c04146108a35780636787a9be146108c1576103e2565b806344df8e70146107a757806347a50517146107c55780634abfbba2146107f557806351b4541c14610825576103e2565b806340452d91116102db57806340452d91146106f957806342966c681461072b578063449a52f81461075b57806344d171871461078b576103e2565b8063313334871461065d578063313ce5671461068d57806331a5995d146106ab57806339509351146106c9576103e2565b806318cbbcfc1161038457806323b872dd1161035357806323b872dd1461059d5780632a7aec09146105cd5780632b29ba23146105fd5780632c1758c11461062d576103e2565b806318cbbcfc146105015780631989c6a81461051f578063213d1e1e1461053d57806323a859441461056d576103e2565b8063095ea7b3116103c0578063095ea7b31461046557806309f28f3c1461049557806311c56615146104b357806318160ddd146104e3576103e2565b806301681a62146103e757806301ffc9a71461041757806306fdde0314610447575b600080fd5b61040160048036038101906103fc9190614b77565b610d7f565b60405161040e9190614bbd565b60405180910390f35b610431600480360381019061042c9190614c30565b610ecd565b60405161043e9190614c78565b60405180910390f35b61044f6111bb565b60405161045c9190614d23565b60405180910390f35b61047f600480360381019061047a9190614d71565b611249565b60405161048c9190614c78565b60405180910390f35b61049d6114a5565b6040516104aa9190614dcd565b60405180910390f35b6104cd60048036038101906104c89190614e14565b6114b8565b6040516104da9190614bbd565b60405180910390f35b6104eb611508565b6040516104f89190614bbd565b60405180910390f35b61050961151f565b6040516105169190614bbd565b60405180910390f35b610527611524565b6040516105349190614bbd565b60405180910390f35b61055760048036038101906105529190614ff5565b611530565b6040516105649190614bbd565b60405180910390f35b61058760048036038101906105829190614ff5565b611549565b6040516105949190614c78565b60405180910390f35b6105b760048036038101906105b29190615022565b6115b1565b6040516105c49190614c78565b60405180910390f35b6105e760048036038101906105e29190614ff5565b6117cf565b6040516105f49190614dcd565b60405180910390f35b61061760048036038101906106129190614b77565b611807565b6040516106249190614c78565b60405180910390f35b61064760048036038101906106429190615075565b6118b5565b6040516106549190614c78565b60405180910390f35b610677600480360381019061067291906150a2565b6118e8565b6040516106849190614bbd565b60405180910390f35b610695611965565b6040516106a29190614bbd565b60405180910390f35b6106b3611989565b6040516106c09190614bbd565b60405180910390f35b6106e360048036038101906106de9190614d71565b61198f565b6040516106f09190614c78565b60405180910390f35b610713600480360381019061070e9190615075565b611b25565b6040516107229392919061510f565b60405180910390f35b61074560048036038101906107409190615075565b611b94565b6040516107529190614c78565b60405180910390f35b61077560048036038101906107709190614d71565b611d65565b6040516107829190614c78565b60405180910390f35b6107a560048036038101906107a091906151ab565b611f3c565b005b6107af611fba565b6040516107bc9190614c78565b60405180910390f35b6107df60048036038101906107da9190614b77565b612009565b6040516107ec9190614bbd565b60405180910390f35b61080f600480360381019061080a9190615075565b612052565b60405161081c9190614bbd565b60405180910390f35b61083f600480360381019061083a9190615075565b6120b2565b60405161084c9190614bbd565b60405180910390f35b61085d6120d3565b60405161086a9190614bbd565b60405180910390f35b61088d60048036038101906108889190614b77565b6120d9565b60405161089a9190614c78565b60405180910390f35b6108ab6121e3565b6040516108b8919061523b565b60405180910390f35b6108db60048036038101906108d69190615075565b6122b0565b6040516108e89190614bbd565b60405180910390f35b61090b60048036038101906109069190615075565b6122f1565b6040516109189190614bbd565b60405180910390f35b61093b60048036038101906109369190615075565b612312565b005b61095760048036038101906109529190614b77565b6123da565b6040516109649190614bbd565b60405180910390f35b610975612441565b6040516109829190614bbd565b60405180910390f35b6109a560048036038101906109a09190614ff5565b612452565b6040516109b29190614bbd565b60405180910390f35b6109c3612480565b6040516109d09190614bbd565b60405180910390f35b6109e1612486565b6040516109ee9190615265565b60405180910390f35b610a116004803603810190610a0c9190615075565b6124ac565b604051610a1e9190614bbd565b60405180910390f35b610a416004803603810190610a3c91906151ab565b6125ed565b005b610a4b6125fe565b604051610a589190615265565b60405180910390f35b610a7b6004803603810190610a769190614b77565b612624565b005b610a856126d9565b604051610a929190614c78565b60405180910390f35b610ab56004803603810190610ab091906151ab565b61299a565b005b610abf6129ab565b604051610acc9190614d23565b60405180910390f35b610add612a39565b604051610aea9190614dcd565b60405180910390f35b610afb612a5d565b604051610b089190614bbd565b60405180910390f35b610b2b6004803603810190610b269190614d71565b612a67565b604051610b389190614c78565b60405180910390f35b610b5b6004803603810190610b569190614d71565b612c86565b604051610b689190614c78565b60405180910390f35b610b79612d87565b604051610b869190614bbd565b60405180910390f35b610b97612d8d565b604051610ba49190614bbd565b60405180910390f35b610bc76004803603810190610bc29190615075565b612db1565b604051610bd49190614bbd565b60405180910390f35b610be5612f38565b604051610bf29190614bbd565b60405180910390f35b610c03612f3e565b604051610c109190614bbd565b60405180910390f35b610c336004803603810190610c2e9190615075565b612f44565b005b610c3d613084565b604051610c4a9190614bbd565b60405180910390f35b610c6d6004803603810190610c689190614b77565b61308e565b604051610c7a9190614c78565b60405180910390f35b610c9d6004803603810190610c989190615280565b613162565b604051610caa9190614bbd565b60405180910390f35b610ccd6004803603810190610cc89190614ff5565b613187565b604051610cda9190614bbd565b60405180910390f35b610cfd6004803603810190610cf891906152c0565b61319b565b604051610d0a9190615396565b60405180910390f35b610d1b61321b565b604051610d2891906153dc565b60405180910390f35b610d39613285565b604051610d469190614bbd565b60405180910390f35b610d696004803603810190610d649190614b77565b6132a9565b604051610d769190614c78565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e589190615426565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ebc9190614bbd565b60405180910390a380915050919050565b600063b61bc9417c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f2157600190506111b6565b635878bcf47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f7357600190506111b6565b63bc4babdd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610fc557600190506111b6565b630d7491f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361101757600190506111b6565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361106957600190506111b6565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036110bb57600190506111b6565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361110d57600190506111b6565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361115f57600190506111b6565b63d00179687c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036111b157600190506111b6565b600090505b919050565b600680546111c890615489565b80601f01602080910402602001604051908101604052809291908181526020018280546111f490615489565b80156112415780601f1061121657610100808354040283529160200191611241565b820191906000526020600020905b81548152906001019060200180831161122457829003601f168201915b505050505081565b60008060006112566121e3565b905060028160ff160361126e5760009250505061149f565b60008160ff1611156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90615506565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561137e576000841461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490615572565b60405180910390fd5b5b6113866126d9565b5067800000000000000084116113a65761139f846122b0565b91506113b2565b67800000000000000091505b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516114909190614bbd565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806114df6114c7856133f2565b6114da6114d460016133f2565b86613418565b61347f565b90506114ea816134fe565b67ffffffffffffffff16846114ff9190615592565b91505092915050565b6000600b5460085461151a9190615592565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b600080826000015163ffffffff16111561156657600090506115ac565b6000826020015168ffffffffffffffffff16111561158757600090506115ac565b6000826040015167ffffffffffffffff1611156115a757600090506115ac565b600190505b919050565b6000806000806115bf6121e3565b905060028160ff16036115d857600093505050506117c8565b60008160ff16111561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690615506565b60405180910390fd5b6116276126d9565b50611631856122b0565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116bc57600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117489190615592565b9250508190555061175a878785613533565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516117b99190614bbd565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036117fe576117fb60016133f2565b90505b80915050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118ae5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000600f82106118c457600080fd5b600082036118d957600f6012541490506118e3565b8160125483161490505b919050565b6000806000806118f7866133f2565b9250611902856133f2565b915061192e7f00000000000000000000000000000000000000000000000000000000000000008361347f565b905061193981613556565b9050611945838261347f565b9050611950816134fe565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b60008061199a6126d9565b506119a4836122b0565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a329190615426565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611b129190614bbd565b60405180910390a3600191505092915050565b60008181548110611b3557600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b600080611b9f6121e3565b60ff1614611bac57600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c515750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790615612565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611cdc57600080fd5b6000611ce7836122b0565b9050611cf333826135e3565b5082600b6000828254611d069190615426565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca584604051611d539190614bbd565b60405180910390a26001915050919050565b6000806000611d726121e3565b60ff1614611d7f57600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e245750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90615612565b60405180910390fd5b611e6b6126d9565b5060006011541115611e945760115483600854611e889190615426565b1115611e9357600080fd5b5b8260086000828254611ea69190615426565b92505081905550611eb6836122b0565b9050611ec284826136e7565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611f209190614bbd565b60405180910390a3611f306137a8565b50600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa19061567e565b60405180910390fd5b611fb383611b94565b5050505050565b6000612004600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b94565b905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082612080919061569e565b7f00000000000000000000000000000000000000000000000000000000000000006120ab9190615426565b9050919050565b6000603c82426120c29190615592565b6120cc919061570f565b9050919050565b60035481565b60006120e8600160ff166118b5565b156120f257600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061217957503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61218257600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601060009054906101000a900460ff161561220357600190506122ad565b6000600f540361221657600090506122ad565b600f5442106122a857612243603c600354612231919061570f565b600f5461223e9190615592565b612db1565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe94260405161228e9190614bbd565b60405180910390a161229e6126d9565b50600290506122ad565b600090505b90565b6000806122d46122bf846133f2565b600260009054906101000a9004600f0b61396c565b90506122df816134fe565b67ffffffffffffffff16915050919050565b6000603c82426123019190615592565b61230b919061570f565b9050919050565b61231f600860ff166118b5565b1561232957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461238357600080fd5b61238b611508565b811161239657600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe6826040516123c89190614bbd565b60405180910390a28060118190555050565b6000806000806123f16123ec86612009565b6133f2565b92506123fe6003546120b2565b905061241983600260009054906101000a9004600f0b61347f565b9150612437612427836134fe565b67ffffffffffffffff16826118e8565b9350505050919050565b600061244d6000612db1565b905090565b600080600061246084611530565b915061246b846117cf565b905061247782826114b8565b92505050919050565b600a5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461250857600080fd5b6010821061254b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125429061578c565b60405180910390fd5b6000601254831614612592576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612589906157f8565b60405180910390fd5b81601260008282541792505081905550600f6012541415157f6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e6012546040516125db9190614bbd565b60405180910390a26012549050919050565b6125f78484611d65565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612631600260ff166118b5565b1561263b57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461269557600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006126e3614ac9565b6126eb614ac9565b6126f3614ac9565b6000806000806000612703612441565b5061270c6139f8565b975061271788611549565b1561272d57600098505050505050505050612997565b60006009548154811061274357612742615818565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505095506127f088613187565b94506001856127ff9190615426565b905061280a866117cf565b9350603c857f000000000000000000000000000000000000000000000000000000000000000061283a919061569e565b612844919061570f565b915061288061287b7f0000000000000000000000000000000000000000000000000000000000000000612876856133f2565b61347f565b613556565b9250612896600084612890611508565b8461319b565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505061295287613b8e565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516129829190614bbd565b60405180910390a16001985050505050505050505b90565b6129a48484611d65565b5050505050565b600780546129b890615489565b80601f01602080910402602001604051908101604052809291908181526020018280546129e490615489565b8015612a315780601f10612a0657610100808354040283529160200191612a31565b820191906000526020600020905b815481529060010190602001808311612a1457829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b600080612a73836122b0565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612afe57600080fd5b612b066126d9565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b939190615592565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051612c739190614bbd565b60405180910390a3600191505092915050565b600080600080612c946121e3565b905060028160ff1603612cad5760009350505050612d81565b60008160ff161115612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90615506565b60405180910390fd5b612cfc6126d9565b50612d06856122b0565b9250612d13338785613533565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612d729190614bbd565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612ddb576000945050505050612f33565b612de66003546120b2565b925060008303612dfd576000945050505050612f33565b600260009054906101000a9004600f0b9050600086118015612e1e57508286105b15612e27578592505b612e30836133f2565b9150612e5c7f00000000000000000000000000000000000000000000000000000000000000008361347f565b9350612e6784613556565b9350612e82600260009054906101000a9004600f0b8561347f565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612eca919061569e565b600354612ed79190615426565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612f239190614dcd565b60405180910390a4829450505050505b919050565b60095481565b60115481565b600080612f54600460ff166118b5565b15612f5e57600080fd5b601060009054906101000a900460ff1615612f7857600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fd257600080fd5b7f000000000000000000000000000000000000000000000000000000000000000083612ffe919061569e565b7f00000000000000000000000000000000000000000000000000000000000000006130299190615426565b9150600f54821161303957600080fd5b600f54905081600f81905550807ff5bd6cb27a0006b5ea8618058a0d84719695cb6d984f4840bc1a54ca12ae4b7c600f546040516130779190614bbd565b60405180910390a2505050565b6000600b54905090565b600061309d600160ff166118b5565b156130a757600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461310157600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600d602052816000526040600020602052806000526040600020600091509150505481565b6000816000015163ffffffff169050919050565b6131a3614ac9565b6131ab614ac9565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004261326c9190615592565b613276919061570f565b6132809190615426565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461330657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001915050919050565b6000677fffffffffffffff82111561340957600080fd5b6040829060020a029050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561346c57506f7fffffffffffffffffffffffffffffff600f0b8113155b61347557600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b81121580156134eb57506f7fffffffffffffffffffffffffffffff600f0b8113155b6134f457600080fd5b8091505092915050565b60008082600f0b121561351057600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b600061353f84836135e3565b5061354a83836136e7565b50600190509392505050565b60006840000000000000000082600f0b1261357057600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b12156135a457600090506135de565b6135db6080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a828518041892505050613cad565b90505b919050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000840361363d576000925050506136e1565b61364685612009565b91508382101561368b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368290615893565b60405180910390fd5b83826136979190615592565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001925050505b92915050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008403613741576000925050506137a2565b61374a85612009565b915083826137589190615426565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001925050505b92915050565b60006137b2614ac9565b60006137bc611508565b9050600060016000805490506137d29190615592565b815481106137e3576137e2615818565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506138be9190615592565b815481106138cf576138ce615818565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361397d57600080fd5b600082600f0b604085600f0b9060020a028161399c5761399b6156e0565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b81121580156139e557506f7fffffffffffffffffffffffffffffff600f0b8113155b6139ee57600080fd5b8091505092915050565b613a00614ac9565b613a08614ac9565b613a10614ac9565b60008060095481548110613a2757613a26615818565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015613b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5691906158df565b6fffffffffffffffffffffffffffffffff169050613b7383613187565b8111613b8457819350505050613b8b565b8293505050505b90565b6000806000613b9c84612452565b613ba4611508565b613bae9190615592565b9150600a54613bbc836122b0565b613bc69190615592565b9050613bf4600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826136e7565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d384604051613c689190614bbd565b60405180910390a3600160096000828254613c839190615426565b9250508190555080600a6000828254613c9c9190615426565b925050819055508192505050919050565b60006840000000000000000082600f0b12613cc757600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613cfb5760009050614ac4565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315613d4957608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b1315613d825760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613dbb5760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613df457608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613e2d5760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613e66576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613e9f57608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613ed8576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613f1057608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613f485760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613f80576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613fb85760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613ff0576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b131561402857608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b13156140605760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b131561409857608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b13156140cf5760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315614106576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b131561413d57608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315614174576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b13156141ab57608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b13156141e25760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315614219576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b13156142505760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315614286576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b13156142bc57608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b13156142f25760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b131561432857608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b131561435e5760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b1315614394576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b13156143ca57608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315614400576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561443557608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b131561446a5760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b131561449f576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b13156144d45760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b1315614509576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b131561453e57608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156145735760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b13156145a857608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156145dc5760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b1315614610576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b131561464457608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b1315614678576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b13156146ac57608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156146e05760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b1315614714576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156147485760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b131561477b576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b13156147ae57608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156147e15760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561481457608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156148475760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b131561487a576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b13156148ad57608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b13156148e0576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561491257608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156149445760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b1315614976576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b13156149a85760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b13156149da576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b1315614a0c57608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b1315614a3e5760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b1315614a7057608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b811115614abf57600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614b4482614b19565b9050919050565b614b5481614b39565b8114614b5f57600080fd5b50565b600081359050614b7181614b4b565b92915050565b600060208284031215614b8d57614b8c614b0f565b5b6000614b9b84828501614b62565b91505092915050565b6000819050919050565b614bb781614ba4565b82525050565b6000602082019050614bd26000830184614bae565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614c0d81614bd8565b8114614c1857600080fd5b50565b600081359050614c2a81614c04565b92915050565b600060208284031215614c4657614c45614b0f565b5b6000614c5484828501614c1b565b91505092915050565b60008115159050919050565b614c7281614c5d565b82525050565b6000602082019050614c8d6000830184614c69565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614ccd578082015181840152602081019050614cb2565b60008484015250505050565b6000601f19601f8301169050919050565b6000614cf582614c93565b614cff8185614c9e565b9350614d0f818560208601614caf565b614d1881614cd9565b840191505092915050565b60006020820190508181036000830152614d3d8184614cea565b905092915050565b614d4e81614ba4565b8114614d5957600080fd5b50565b600081359050614d6b81614d45565b92915050565b60008060408385031215614d8857614d87614b0f565b5b6000614d9685828601614b62565b9250506020614da785828601614d5c565b9150509250929050565b600081600f0b9050919050565b614dc781614db1565b82525050565b6000602082019050614de26000830184614dbe565b92915050565b614df181614db1565b8114614dfc57600080fd5b50565b600081359050614e0e81614de8565b92915050565b60008060408385031215614e2b57614e2a614b0f565b5b6000614e3985828601614d5c565b9250506020614e4a85828601614dff565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614e9182614cd9565b810181811067ffffffffffffffff82111715614eb057614eaf614e59565b5b80604052505050565b6000614ec3614b05565b9050614ecf8282614e88565b919050565b600063ffffffff82169050919050565b614eed81614ed4565b8114614ef857600080fd5b50565b600081359050614f0a81614ee4565b92915050565b600068ffffffffffffffffff82169050919050565b614f2e81614f10565b8114614f3957600080fd5b50565b600081359050614f4b81614f25565b92915050565b600067ffffffffffffffff82169050919050565b614f6e81614f51565b8114614f7957600080fd5b50565b600081359050614f8b81614f65565b92915050565b600060608284031215614fa757614fa6614e54565b5b614fb16060614eb9565b90506000614fc184828501614efb565b6000830152506020614fd584828501614f3c565b6020830152506040614fe984828501614f7c565b60408301525092915050565b60006060828403121561500b5761500a614b0f565b5b600061501984828501614f91565b91505092915050565b60008060006060848603121561503b5761503a614b0f565b5b600061504986828701614b62565b935050602061505a86828701614b62565b925050604061506b86828701614d5c565b9150509250925092565b60006020828403121561508b5761508a614b0f565b5b600061509984828501614d5c565b91505092915050565b600080604083850312156150b9576150b8614b0f565b5b60006150c785828601614d5c565b92505060206150d885828601614d5c565b9150509250929050565b6150eb81614ed4565b82525050565b6150fa81614f10565b82525050565b61510981614f51565b82525050565b600060608201905061512460008301866150e2565b61513160208301856150f1565b61513e6040830184615100565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261516b5761516a615146565b5b8235905067ffffffffffffffff8111156151885761518761514b565b5b6020830191508360018202830111156151a4576151a3615150565b5b9250929050565b600080600080606085870312156151c5576151c4614b0f565b5b60006151d387828801614b62565b94505060206151e487828801614d5c565b935050604085013567ffffffffffffffff81111561520557615204614b14565b5b61521187828801615155565b925092505092959194509250565b600060ff82169050919050565b6152358161521f565b82525050565b6000602082019050615250600083018461522c565b92915050565b61525f81614b39565b82525050565b600060208201905061527a6000830184615256565b92915050565b6000806040838503121561529757615296614b0f565b5b60006152a585828601614b62565b92505060206152b685828601614b62565b9150509250929050565b600080600080608085870312156152da576152d9614b0f565b5b60006152e887828801614d5c565b94505060206152f987828801614dff565b935050604061530a87828801614d5c565b925050606061531b87828801614d5c565b91505092959194509250565b61533081614ed4565b82525050565b61533f81614f10565b82525050565b61534e81614f51565b82525050565b60608201600082015161536a6000850182615327565b50602082015161537d6020850182615336565b5060408201516153906040850182615345565b50505050565b60006060820190506153ab6000830184615354565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6153d6816153b1565b82525050565b60006020820190506153f160008301846153cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061543182614ba4565b915061543c83614ba4565b9250828201905080821115615454576154536153f7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806154a157607f821691505b6020821081036154b4576154b361545a565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b60006154f0600783614c9e565b91506154fb826154ba565b602082019050919050565b6000602082019050818103600083015261551f816154e3565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b600061555c600a83614c9e565b915061556782615526565b602082019050919050565b6000602082019050818103600083015261558b8161554f565b9050919050565b600061559d82614ba4565b91506155a883614ba4565b92508282039050818111156155c0576155bf6153f7565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006155fc600a83614c9e565b9150615607826155c6565b602082019050919050565b6000602082019050818103600083015261562b816155ef565b9050919050565b7f4552525f4f4e4c595f53454c465f4255524e0000000000000000000000000000600082015250565b6000615668601283614c9e565b915061567382615632565b602082019050919050565b600060208201905081810360008301526156978161565b565b9050919050565b60006156a982614ba4565b91506156b483614ba4565b92508282026156c281614ba4565b915082820484148315176156d9576156d86153f7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061571a82614ba4565b915061572583614ba4565b925082615735576157346156e0565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b6000615776601183614c9e565b915061578182615740565b602082019050919050565b600060208201905081810360008301526157a581615769565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006157e2601283614c9e565b91506157ed826157ac565b602082019050919050565b60006020820190508181036000830152615811816157d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061587d600d83614c9e565b915061588882615847565b602082019050919050565b600060208201905081810360008301526158ac81615870565b9050919050565b6158bc816153b1565b81146158c757600080fd5b50565b6000815190506158d9816158b3565b92915050565b6000602082840312156158f5576158f4614b0f565b5b6000615903848285016158ca565b9150509291505056fea264697066735822122068c5add24c1009544fb9b2200927e1bc735a86f0962ec2d82521583d3c78589c64736f6c637828302e382e32312d646576656c6f702e323032342e342e31352b636f6d6d69742e64393937346265640059
+\ No newline at end of file
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.metadata.json b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.metadata.json
@@ -1 +1 @@
-{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_decayLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTimestamp","type":"uint256"}],"name":"ExpiryChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decayLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sweep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"balanceOf(address)":{"notice":"Implements ERC20"}},"version":1}},"settings":{"compilationTarget":{"DemurrageTokenSingleNocap.sol":"DemurrageTokenSingleNocap"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"DemurrageTokenSingleNocap.sol":{"keccak256":"0x538a3234dd292c31486318f8c54fbfe778f26120b52915c076572d50639d6ead","license":"AGPL-3.0-or-later","urls":["bzz-raw://42f0c58b1197c3ffe34fd2b311ea06cbb394f80d8f9165948946ec6d7ebcef1b","dweb:/ipfs/QmbL6QcoQAXBzfjarB7ap3tBcerVM6MzJ4aG9egjxoRReg"]},"aux/ABDKMath64x64.sol":{"keccak256":"0x089b21db72314836305ba36b1773c3f0c2d5ac3a0f418820557c17c0e57c3c50","license":"BSD-4-Clause","urls":["bzz-raw://730ce8d750b0a6588f0d0724ace1c4d6dd90cf6dc0d2805b775b065fce147dfa","dweb:/ipfs/Qmdx7xRKvhXu1JtAVs25bER3LN2oGj2ZjW8jEvJpzQyXhc"]}},"version":1}
+{"compiler":{"version":"0.8.21-develop.2024.4.15+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_decayLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTimestamp","type":"uint256"}],"name":"ExpiryChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decayLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sweep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"balanceOf(address)":{"notice":"Implements ERC20"}},"version":1}},"settings":{"compilationTarget":{"DemurrageTokenSingleNocap.sol":"DemurrageTokenSingleNocap"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"DemurrageTokenSingleNocap.sol":{"keccak256":"0x1bb58cab75adfae875340160b090ecf12e91136b6afc83840950c68fbe306215","license":"AGPL-3.0-or-later","urls":["bzz-raw://9377bbd56a64996c0d6f78f25a822948f59fc06d590c8fcc2d1dba84588b4eef","dweb:/ipfs/QmZ85dDdm4an2Bx6NauRcQSMiUQGEkGhbsU3FrahQhM1uS"]},"aux/ABDKMath64x64.sol":{"keccak256":"0x089b21db72314836305ba36b1773c3f0c2d5ac3a0f418820557c17c0e57c3c50","license":"BSD-4-Clause","urls":["bzz-raw://730ce8d750b0a6588f0d0724ace1c4d6dd90cf6dc0d2805b775b065fce147dfa","dweb:/ipfs/Qmdx7xRKvhXu1JtAVs25bER3LN2oGj2ZjW8jEvJpzQyXhc"]}},"version":1}
diff --git a/python/requirements.txt b/python/requirements.txt
@@ -1,5 +1,9 @@
-chainlib-eth~=0.4.11
-chainlib~=0.4.12
-eth-erc20~=0.7.0
-funga-eth~=0.6.0
+#chainlib-eth~=0.4.11
+#chainlib~=0.4.12
+#eth-erc20~=0.7.0
+#funga-eth~=0.6.0
+chainlib-eth~=0.6.1
+chainlib~=0.5.0
+eth-erc20~=0.9.0
+funga-eth~=0.8.0
dexif~=0.0.2
diff --git a/python/setup.cfg b/python/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = erc20-demurrage-token
-version = 0.5.6
+version = 0.5.7
description = ERC20 token with redistributed continual demurrage
author = Louis Holbrook
author_email = dev@holbrook.no
diff --git a/python/test_requirements.txt b/python/test_requirements.txt
@@ -1,2 +1,3 @@
-eth_tester==0.5.0b3
-py-evm==0.3.0a20
+eth_tester==0.10.0b4
+py-evm==0.10.0b4
+rlp==3.0.0
diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol
@@ -165,6 +165,7 @@ contract DemurrageTokenSingleNocap {
}
function seal(uint256 _state) public returns(uint256) {
+ require(msg.sender == owner);
require(_state < 16, 'ERR_INVALID_STATE');
require(_state & sealState == 0, 'ERR_ALREADY_LOCKED');
sealState |= _state;
@@ -599,8 +600,8 @@ contract DemurrageTokenSingleNocap {
changePeriod();
- // dex code will attempt uint256max approve, but contract cannot handle that size
- // truncate to biggest possible value
+ // dex code will attempt uint256max approve, but basevalue calc is only valid up to a maximum of 2^63-1
+ // skip the base value calc for higher values
if (_value <= VALUE_LIMIT) {
baseValue = toBaseAmount(_value);
} else {