erc20-demurrage-token

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

commit 4e6e5300f7e5818ffdb3099bf20fc192d196f58b
parent edc9b6587c6affd4c4dc0be28b147459f8140b63
Author: lash <dev@holbrook.no>
Date:   Sun, 12 Feb 2023 08:17:58 +0000

Alias writer, emit missing events

Diffstat:
Mpython/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin | 4++--
Mpython/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json | 2+-
Msolidity/DemurrageTokenSingleNocap.sol | 11+++++++++--
3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin @@ -1 +1 @@ -60c06040523480156200001157600080fd5b506040516200610538038062006105833981810160405281019062000037919062000909565b6801000000000000000083600f0b126200005057600080fd5b6200005a6200061e565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550866006908162000126919062000c2a565b50856007908162000138919062000c2a565b508460ff166008819055504260038190555060035460808181525050603c8362000163919062000d40565b60a081815250506200018a60016200034f6401000000000262002d4d176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550620001e484620003766401000000000262002d73176401000000009004565b600d60006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200024e6000600260009054906101000a9004600f0b60006001620003ca640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000d8b565b6000677fffffffffffffff8211156200036757600080fd5b6040829060020a029050919050565b60008082600f0b136200038857600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af620003b5846200044e640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b620003d46200061e565b620003de6200061e565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b136200046057600080fd5b60008083600f0b90506801000000000000000081126200049c576040819060008212600003808260020a82851804189250505090506040820191505b6401000000008112620004cb576020819060008212600003808260020a82851804189250505090506020820191505b620100008112620004f8576010819060008212600003808260020a82851804189250505090506010820191505b610100811262000524576008819060008212600003808260020a82851804189250505090506008820191505b601081126200054f576004819060008212600003808260020a82851804189250505090506004820191505b600481126200057a576002819060008212600003808260020a82851804189250505090506002820191505b600281126200058a576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b600081131562000611578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a8285180418925050509050620005b7565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006c38262000678565b810181811067ffffffffffffffff82111715620006e557620006e462000689565b5b80604052505050565b6000620006fa6200065a565b9050620007088282620006b8565b919050565b600067ffffffffffffffff8211156200072b576200072a62000689565b5b620007368262000678565b9050602081019050919050565b60005b838110156200076357808201518184015260208101905062000746565b60008484015250505050565b60006200078662000780846200070d565b620006ee565b905082815260208101848484011115620007a557620007a462000673565b5b620007b284828562000743565b509392505050565b600082601f830112620007d257620007d16200066e565b5b8151620007e48482602086016200076f565b91505092915050565b600060ff82169050919050565b6200080581620007ed565b81146200081157600080fd5b50565b6000815190506200082581620007fa565b92915050565b600081600f0b9050919050565b62000843816200082b565b81146200084f57600080fd5b50565b600081519050620008638162000838565b92915050565b6000819050919050565b6200087e8162000869565b81146200088a57600080fd5b50565b6000815190506200089e8162000873565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008d182620008a4565b9050919050565b620008e381620008c4565b8114620008ef57600080fd5b50565b6000815190506200090381620008d8565b92915050565b60008060008060008060c0878903121562000929576200092862000664565b5b600087015167ffffffffffffffff8111156200094a576200094962000669565b5b6200095889828a01620007ba565b965050602087015167ffffffffffffffff8111156200097c576200097b62000669565b5b6200098a89828a01620007ba565b95505060406200099d89828a0162000814565b9450506060620009b089828a0162000852565b9350506080620009c389828a016200088d565b92505060a0620009d689828a01620008f2565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a3657607f821691505b60208210810362000a4c5762000a4b620009ee565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000ab97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a77565b62000ac5868362000a77565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000b0862000b0262000afc8462000869565b62000add565b62000869565b9050919050565b6000819050919050565b62000b248362000ae7565b62000b3c62000b338262000b0f565b84845462000a87565b825550505050565b600090565b62000b5362000b44565b62000b6081848462000b19565b505050565b5b8181101562000b885762000b7c60008262000b49565b60018101905062000b66565b5050565b601f82111562000bd75762000ba18162000a52565b62000bac8462000a67565b8101602085101562000bbc578190505b62000bd462000bcb8562000a67565b83018262000b65565b50505b505050565b60008160020a8304905092915050565b600062000bff6000198460080262000bdc565b1980831691505092915050565b600062000c1a838362000bec565b9150826002028217905092915050565b62000c3582620009e3565b67ffffffffffffffff81111562000c515762000c5062000689565b5b62000c5d825462000a1d565b62000c6a82828562000b8c565b600060209050601f83116001811462000ca2576000841562000c8d578287015190505b62000c99858262000c0c565b86555062000d09565b601f19841662000cb28662000a52565b60005b8281101562000cdc5784890151825560018201915060208501945060208101905062000cb5565b8683101562000cfc578489015162000cf8601f89168262000bec565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d4d8262000869565b915062000d5a8362000869565b925082820262000d6a8162000869565b9150828204841483151762000d845762000d8362000d11565b5b5092915050565b60805160a05161532362000de260003960008181611aec015281816122da015281816128dc01528181612b0f0152612c23015260008181611b1801528181612b3b01528181612c440152612c8901526153236000f3fe608060405234801561001057600080fd5b50600436106103a0576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e116101fb578063983b2d561161012c578063d5abeb01116100ca578063e69571af11610099578063e69571af14610ba9578063e809529514610bd9578063eda4e6d614610bf7578063f2fde38b14610c15576103a0565b8063d5abeb0114610b21578063d7a52fa914610b3f578063d89135cd14610b5b578063e54063a614610b79576103a0565b8063b1cb0db311610106578063b1cb0db314610a97578063b470aade14610ab5578063c0ab707714610ad3578063d340ef8a14610b03576103a0565b8063983b2d5614610a07578063a457c2d714610a37578063a9059cbb14610a67576103a0565b806379ba5097116101995780638da5cb5b116101735780638da5cb5b146109915780638f0b2d5d146109af5780638f1df6bc146109cb57806395d89b41146109e9576103a0565b806379ba50971461092557806384dde4af1461094357806386fe212d14610961576103a0565b8063731f237c116101d5578063731f237c1461089b57806373f42561146108b95780637445e33a146108d757806374bedb9514610907576103a0565b80636a2d094e1461081f5780636f8b44b01461084f57806370a082311461086b576103a0565b80633092afd5116102d5578063449a52f81161027357806351b4541c1161024d57806351b4541c1461078357806358b2833b146107b35780635f408c04146107d15780636787a9be146107ef576103a0565b8063449a52f8146106f357806347a50517146107235780634abfbba214610753576103a0565b806331a5995d116102af57806331a5995d14610657578063395093511461067557806340452d91146106a557806342966c68146106d7576103a0565b80633092afd5146105d95780633133348714610609578063313ce56714610639576103a0565b80631989c6a81161034257806323a859441161031c57806323a859441461051957806323b872dd146105495780632a7aec09146105795780632c1758c1146105a9576103a0565b80631989c6a8146104ad578063213d1e1e146104cb578063229ba197146104fb576103a0565b806309f28f3c1161037e57806309f28f3c1461042357806311c566151461044157806318160ddd1461047157806318cbbcfc1461048f576103a0565b806301ffc9a7146103a557806306fdde03146103d5578063095ea7b3146103f3575b600080fd5b6103bf60048036038101906103ba91906146d7565b610c45565b6040516103cc919061471f565b60405180910390f35b6103dd610deb565b6040516103ea91906147ca565b60405180910390f35b61040d60048036038101906104089190614880565b610e79565b60405161041a919061471f565b60405180910390f35b61042b6110b5565b60405161043891906148dc565b60405180910390f35b61045b60048036038101906104569190614923565b6110c8565b6040516104689190614972565b60405180910390f35b610479611118565b6040516104869190614972565b60405180910390f35b61049761112f565b6040516104a49190614972565b60405180910390f35b6104b5611134565b6040516104c29190614972565b60405180910390f35b6104e560048036038101906104e09190614b2e565b611140565b6040516104f29190614972565b60405180910390f35b610503611159565b60405161051091906148dc565b60405180910390f35b610533600480360381019061052e9190614b2e565b61116c565b604051610540919061471f565b60405180910390f35b610563600480360381019061055e9190614b5b565b6111d4565b604051610570919061471f565b60405180910390f35b610593600480360381019061058e9190614b2e565b6113f2565b6040516105a091906148dc565b60405180910390f35b6105c360048036038101906105be9190614bae565b61142a565b6040516105d0919061471f565b60405180910390f35b6105f360048036038101906105ee9190614bdb565b61145d565b604051610600919061471f565b60405180910390f35b610623600480360381019061061e9190614c08565b611567565b6040516106309190614972565b60405180910390f35b6106416115d3565b60405161064e9190614972565b60405180910390f35b61065f6115d9565b60405161066c9190614972565b60405180910390f35b61068f600480360381019061068a9190614880565b6115df565b60405161069c919061471f565b60405180910390f35b6106bf60048036038101906106ba9190614bae565b611775565b6040516106ce93929190614c75565b60405180910390f35b6106f160048036038101906106ec9190614bae565b6117e4565b005b61070d60048036038101906107089190614880565b611920565b60405161071a919061471f565b60405180910390f35b61073d60048036038101906107389190614bdb565b611a9f565b60405161074a9190614972565b60405180910390f35b61076d60048036038101906107689190614bae565b611ae8565b60405161077a9190614972565b60405180910390f35b61079d60048036038101906107989190614bae565b611b48565b6040516107aa9190614972565b60405180910390f35b6107bb611b69565b6040516107c89190614972565b60405180910390f35b6107d9611b6f565b6040516107e69190614cc8565b60405180910390f35b61080960048036038101906108049190614bae565b611c3c565b6040516108169190614972565b60405180910390f35b61083960048036038101906108349190614bae565b611c7d565b6040516108469190614972565b60405180910390f35b61086960048036038101906108649190614bae565b611c9e565b005b61088560048036038101906108809190614bdb565b611d66565b6040516108929190614972565b60405180910390f35b6108a3611dd0565b6040516108b09190614972565b60405180910390f35b6108c1611de1565b6040516108ce9190614972565b60405180910390f35b6108f160048036038101906108ec9190614b2e565b611de7565b6040516108fe9190614972565b60405180910390f35b61090f611e15565b60405161091c9190614972565b60405180910390f35b61092d611e1b565b60405161093a919061471f565b60405180910390f35b61094b611fc2565b6040516109589190614cf2565b60405180910390f35b61097b60048036038101906109769190614bae565b611fe8565b6040516109889190614972565b60405180910390f35b6109996120c7565b6040516109a69190614cf2565b60405180910390f35b6109c960048036038101906109c49190614bdb565b6120ed565b005b6109d36121a2565b6040516109e0919061471f565b60405180910390f35b6109f1612452565b6040516109fe91906147ca565b60405180910390f35b610a216004803603810190610a1c9190614bdb565b6124e0565b604051610a2e919061471f565b60405180910390f35b610a516004803603810190610a4c9190614880565b6125b4565b604051610a5e919061471f565b60405180910390f35b610a816004803603810190610a7c9190614880565b6127d3565b604051610a8e919061471f565b60405180910390f35b610a9f6128d4565b604051610aac9190614972565b60405180910390f35b610abd6128da565b604051610aca9190614972565b60405180910390f35b610aed6004803603810190610ae89190614bae565b6128fe565b604051610afa9190614972565b60405180910390f35b610b0b612a74565b604051610b189190614972565b60405180910390f35b610b29612a7a565b604051610b369190614972565b60405180910390f35b610b596004803603810190610b549190614bae565b612a80565b005b610b63612b7f565b604051610b709190614972565b60405180910390f35b610b936004803603810190610b8e9190614b2e565b612b89565b604051610ba09190614972565b60405180910390f35b610bc36004803603810190610bbe9190614d0d565b612b9d565b604051610bd09190614de3565b60405180910390f35b610be1612c1d565b604051610bee9190614e29565b60405180910390f35b610bff612c87565b604051610c0c9190614972565b60405180910390f35b610c2f6004803603810190610c2a9190614bdb565b612cab565b604051610c3c919061471f565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c995760019050610de6565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ceb5760019050610de6565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d3d5760019050610de6565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d8f5760019050610de6565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610de15760019050610de6565b600090505b919050565b60068054610df890614e73565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2490614e73565b8015610e715780601f10610e4657610100808354040283529160200191610e71565b820191906000526020600020905b815481529060010190602001808311610e5457829003601f168201915b505050505081565b6000806000610e86611b6f565b905060028160ff1603610e9e576000925050506110af565b60008160ff161115610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614ef0565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610fae5760008414610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490614f5c565b60405180910390fd5b5b610fb66121a2565b50610fc084611c3c565b915081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516110a09190614972565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806110ef6110d785612d4d565b6110ea6110e46001612d4d565b86612db5565b612e1c565b90506110fa81612e9b565b67ffffffffffffffff168461110f9190614fab565b91505092915050565b6000600c5460095461112a9190614fab565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b600d60009054906101000a9004600f0b81565b600080826000015163ffffffff16111561118957600090506111cf565b6000826020015168ffffffffffffffffff1611156111aa57600090506111cf565b6000826040015167ffffffffffffffff1611156111ca57600090506111cf565b600190505b919050565b6000806000806111e2611b6f565b905060028160ff16036111fb57600093505050506113eb565b60008160ff161115611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990614ef0565b60405180910390fd5b61124a6121a2565b5061125485611c3c565b925082600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156112df57600080fd5b82600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461136b9190614fab565b9250508190555061137d878785612ed0565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113dc9190614972565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036114215761141e6001612d4d565b90505b80915050919050565b6000600f821061143957600080fd5b6000820361144e57600f601454149050611458565b8160145483161490505b919050565b600061146c600160ff1661142a565b1561147657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114fd57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61150657600080fd5b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060008061157686612d4d565b925061158185612d4d565b915061159c600d60009054906101000a9004600f0b83612e1c565b90506115a781612ef5565b90506115b38382612e1c565b90506115be81612e9b565b67ffffffffffffffff16935050505092915050565b60085481565b60145481565b6000806115ea6121a2565b506115f483611c3c565b905080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116829190614fdf565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516117629190614972565b60405180910390a3600191505092915050565b6000818154811061178557600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b60006117ee611b6f565b60ff16146117fb57600080fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661185157600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561189d57600080fd5b60006118a882611c3c565b90506118b43382612f82565b5081600c60008282546118c79190614fdf565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516119149190614972565b60405180910390a25050565b600080600061192d611b6f565b60ff161461193a57600080fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd9061505f565b60405180910390fd5b6119ce6121a2565b50600060135411156119f757601354836009546119eb9190614fdf565b11156119f657600080fd5b5b8260096000828254611a099190614fdf565b92505081905550611a1983611c3c565b9050611a258482613089565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611a839190614972565b60405180910390a3611a9361314d565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611b16919061507f565b7f0000000000000000000000000000000000000000000000000000000000000000611b419190614fdf565b9050919050565b6000603c8242611b589190614fab565b611b6291906150f0565b9050919050565b60035481565b6000601260009054906101000a900460ff1615611b8f5760019050611c39565b600060115403611ba25760009050611c39565b6011544210611c3457611bcf603c600354611bbd91906150f0565b601154611bca9190614fab565b6128fe565b506001601260006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611c1a9190614972565b60405180910390a1611c2a6121a2565b5060029050611c39565b600090505b90565b600080611c60611c4b84612d4d565b600260009054906101000a9004600f0b613311565b9050611c6b81612e9b565b67ffffffffffffffff16915050919050565b6000603c8242611c8d9190614fab565b611c9791906150f0565b9050919050565b611cab600860ff1661142a565b15611cb557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0f57600080fd5b611d17611118565b8111611d2257600080fd5b6013547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611d549190614972565b60405180910390a28060138190555050565b6000806000806000611d7f611d7a87611a9f565b612d4d565b9350611d8c600354611b48565b9150611da784600260009054906101000a9004600f0b612e1c565b9250611dc5611db584612e9b565b67ffffffffffffffff1683611567565b945050505050919050565b6000611ddc60006128fe565b905090565b600c5481565b6000806000611df584611140565b9150611e00846113f2565b9050611e0c82826110c8565b92505050919050565b600b5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7857600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006010821061202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061516d565b60405180910390fd5b6000601454831614612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b906151d9565b60405180910390fd5b816014600082825417925050819055507fdd5e7cad9599c1dcaa8d5adcd88f157fc5fada62511c0d3edb1bfd3b778acc416014546040516120b59190614972565b60405180910390a16014549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120fa600260ff1661142a565b1561210457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215e57600080fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006121ac614634565b6121b4614634565b6121bc614634565b60008060008060006121cc611dd0565b506121d561339d565b97506121e08861116c565b156121f65760009850505050505050505061244f565b6000600a548154811061220c5761220b6151f9565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505095506122b988612b89565b94506001856122c89190614fdf565b90506122d3866113f2565b9350603c857f0000000000000000000000000000000000000000000000000000000000000000612303919061507f565b61230d91906150f0565b9150612338612333600d60009054906101000a9004600f0b61232e85612d4d565b612e1c565b612ef5565b925061234e600084612348611118565b84612b9d565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505061240a87613533565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d6758160405161243a9190614972565b60405180910390a16001985050505050505050505b90565b6007805461245f90614e73565b80601f016020809104026020016040519081016040528092919081815260200182805461248b90614e73565b80156124d85780601f106124ad576101008083540402835291602001916124d8565b820191906000526020600020905b8154815290600101906020018083116124bb57829003601f168201915b505050505081565b60006124ef600160ff1661142a565b156124f957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255357600080fd5b6001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806125c083611c3c565b905080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561264b57600080fd5b6126536121a2565b5080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126e09190614fab565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516127c09190614972565b60405180910390a3600191505092915050565b6000806000806127e1611b6f565b905060028160ff16036127fa57600093505050506128ce565b60008160ff161115612841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283890614ef0565b60405180910390fd5b6128496121a2565b5061285385611c3c565b9250612860338785612ed0565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516128bf9190614972565b60405180910390a38193505050505b92915050565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601260009054906101000a900460ff1615612928576000945050505050612a6f565b612933600354611b48565b92506000830361294a576000945050505050612a6f565b600260009054906101000a9004600f0b905060008611801561296b57508286105b15612974578592505b61297d83612d4d565b9150612998600d60009054906101000a9004600f0b83612e1c565b93506129a384612ef5565b93506129be600260009054906101000a9004600f0b85612e1c565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612a06919061507f565b600354612a139190614fdf565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612a5f91906148dc565b60405180910390a4829450505050505b919050565b600a5481565b60135481565b6000612a8f600460ff1661142a565b15612a9957600080fd5b601260009054906101000a900460ff1615612ab357600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b0d57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612b39919061507f565b7f0000000000000000000000000000000000000000000000000000000000000000612b649190614fdf565b90506011548111612b7457600080fd5b806011819055505050565b6000600c54905090565b6000816000015163ffffffff169050919050565b612ba5614634565b612bad614634565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612c6e9190614fab565b612c7891906150f0565b612c829190614fdf565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d0757600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612d6457600080fd5b6040829060020a029050919050565b60008082600f0b13612d8457600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612da084613652565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612e0957506f7fffffffffffffffffffffffffffffff600f0b8113155b612e1257600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612e8857506f7fffffffffffffffffffffffffffffff600f0b8113155b612e9157600080fd5b8091505092915050565b60008082600f0b1215612ead57600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b600080612edd8584612f82565b50612ee88484613089565b5060019150509392505050565b60006840000000000000000082600f0b12612f0f57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215612f435760009050612f7d565b612f7a6080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a828518041892505050613818565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008503612fde5760009350505050613083565b612fe786611a9f565b92508483101561302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390615274565b60405180910390fd5b84836130389190614fab565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036130e55760009350505050613147565b6130ee86611a9f565b925084836130fc9190614fdf565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000613157614634565b6000613161611118565b9050600060016000805490506131779190614fab565b81548110613188576131876151f9565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506132639190614fab565b81548110613274576132736151f9565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361332257600080fd5b600082600f0b604085600f0b9060020a0281613341576133406150c1565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561338a57506f7fffffffffffffffffffffffffffffff600f0b8113155b61339357600080fd5b8091505092915050565b6133a5614634565b6133ad614634565b6133b5614634565b600080600a54815481106133cc576133cb6151f9565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156134d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fb91906152c0565b6fffffffffffffffffffffffffffffffff16905061351883612b89565b811161352957819350505050613530565b8293505050505b90565b600080600061354184611de7565b613549611118565b6135539190614fab565b9150600b5461356183611c3c565b61356b9190614fab565b9050613599601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613089565b50836000015163ffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d38460405161360d9190614972565b60405180910390a36001600a60008282546136289190614fdf565b9250508190555080600b60008282546136419190614fdf565b925050819055508192505050919050565b60008082600f0b1361366357600080fd5b60008083600f0b905068010000000000000000811261369e576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126136cc576020819060008212600003808260020a82851804189250505090506020820191505b6201000081126136f8576010819060008212600003808260020a82851804189250505090506010820191505b6101008112613723576008819060008212600003808260020a82851804189250505090506008820191505b6010811261374d576004819060008212600003808260020a82851804189250505090506004820191505b60048112613777576002819060008212600003808260020a82851804189250505090506002820191505b60028112613786576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b600081131561380b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a82851804189250505090506137b3565b5081945050505050919050565b60006840000000000000000082600f0b1261383257600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613866576000905061462f565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b13156138b457608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b13156138ed5760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b13156139265760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b131561395f57608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b13156139985760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b13156139d1576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613a0a57608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613a43576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613a7b57608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613ab35760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613aeb576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613b235760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613b5b576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613b9357608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613bcb5760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613c0357608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613c3a5760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613c71576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613ca857608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613cdf576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613d1657608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613d4d5760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613d84576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613dbb5760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613df1576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b1315613e2757608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b1315613e5d5760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b1315613e9357608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b1315613ec95760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b1315613eff576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b1315613f3557608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315613f6b576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b1315613fa057608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b1315613fd55760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b131561400a576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b131561403f5760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b1315614074576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b13156140a957608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156140de5760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b131561411357608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156141475760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b131561417b576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b13156141af57608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b13156141e3576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b131561421757608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b131561424b5760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b131561427f576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156142b35760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b13156142e6576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b131561431957608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b131561434c5760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561437f57608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156143b25760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b13156143e5576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b131561441857608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b131561444b576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561447d57608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156144af5760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b13156144e1576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b13156145135760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b1315614545576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b131561457757608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b13156145a95760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b13156145db57608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561462a57600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6146b48161467f565b81146146bf57600080fd5b50565b6000813590506146d1816146ab565b92915050565b6000602082840312156146ed576146ec61467a565b5b60006146fb848285016146c2565b91505092915050565b60008115159050919050565b61471981614704565b82525050565b60006020820190506147346000830184614710565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614774578082015181840152602081019050614759565b60008484015250505050565b6000601f19601f8301169050919050565b600061479c8261473a565b6147a68185614745565b93506147b6818560208601614756565b6147bf81614780565b840191505092915050565b600060208201905081810360008301526147e48184614791565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614817826147ec565b9050919050565b6148278161480c565b811461483257600080fd5b50565b6000813590506148448161481e565b92915050565b6000819050919050565b61485d8161484a565b811461486857600080fd5b50565b60008135905061487a81614854565b92915050565b600080604083850312156148975761489661467a565b5b60006148a585828601614835565b92505060206148b68582860161486b565b9150509250929050565b600081600f0b9050919050565b6148d6816148c0565b82525050565b60006020820190506148f160008301846148cd565b92915050565b614900816148c0565b811461490b57600080fd5b50565b60008135905061491d816148f7565b92915050565b6000806040838503121561493a5761493961467a565b5b60006149488582860161486b565b92505060206149598582860161490e565b9150509250929050565b61496c8161484a565b82525050565b60006020820190506149876000830184614963565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6149ca82614780565b810181811067ffffffffffffffff821117156149e9576149e8614992565b5b80604052505050565b60006149fc614670565b9050614a0882826149c1565b919050565b600063ffffffff82169050919050565b614a2681614a0d565b8114614a3157600080fd5b50565b600081359050614a4381614a1d565b92915050565b600068ffffffffffffffffff82169050919050565b614a6781614a49565b8114614a7257600080fd5b50565b600081359050614a8481614a5e565b92915050565b600067ffffffffffffffff82169050919050565b614aa781614a8a565b8114614ab257600080fd5b50565b600081359050614ac481614a9e565b92915050565b600060608284031215614ae057614adf61498d565b5b614aea60606149f2565b90506000614afa84828501614a34565b6000830152506020614b0e84828501614a75565b6020830152506040614b2284828501614ab5565b60408301525092915050565b600060608284031215614b4457614b4361467a565b5b6000614b5284828501614aca565b91505092915050565b600080600060608486031215614b7457614b7361467a565b5b6000614b8286828701614835565b9350506020614b9386828701614835565b9250506040614ba48682870161486b565b9150509250925092565b600060208284031215614bc457614bc361467a565b5b6000614bd28482850161486b565b91505092915050565b600060208284031215614bf157614bf061467a565b5b6000614bff84828501614835565b91505092915050565b60008060408385031215614c1f57614c1e61467a565b5b6000614c2d8582860161486b565b9250506020614c3e8582860161486b565b9150509250929050565b614c5181614a0d565b82525050565b614c6081614a49565b82525050565b614c6f81614a8a565b82525050565b6000606082019050614c8a6000830186614c48565b614c976020830185614c57565b614ca46040830184614c66565b949350505050565b600060ff82169050919050565b614cc281614cac565b82525050565b6000602082019050614cdd6000830184614cb9565b92915050565b614cec8161480c565b82525050565b6000602082019050614d076000830184614ce3565b92915050565b60008060008060808587031215614d2757614d2661467a565b5b6000614d358782880161486b565b9450506020614d468782880161490e565b9350506040614d578782880161486b565b9250506060614d688782880161486b565b91505092959194509250565b614d7d81614a0d565b82525050565b614d8c81614a49565b82525050565b614d9b81614a8a565b82525050565b606082016000820151614db76000850182614d74565b506020820151614dca6020850182614d83565b506040820151614ddd6040850182614d92565b50505050565b6000606082019050614df86000830184614da1565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b614e2381614dfe565b82525050565b6000602082019050614e3e6000830184614e1a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e8b57607f821691505b602082108103614e9e57614e9d614e44565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b6000614eda600783614745565b9150614ee582614ea4565b602082019050919050565b60006020820190508181036000830152614f0981614ecd565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000614f46600a83614745565b9150614f5182614f10565b602082019050919050565b60006020820190508181036000830152614f7581614f39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614fb68261484a565b9150614fc18361484a565b9250828203905081811115614fd957614fd8614f7c565b5b92915050565b6000614fea8261484a565b9150614ff58361484a565b925082820190508082111561500d5761500c614f7c565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615049600a83614745565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b600061508a8261484a565b91506150958361484a565b92508282026150a38161484a565b915082820484148315176150ba576150b9614f7c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150fb8261484a565b91506151068361484a565b925082615116576151156150c1565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b6000615157601183614745565b915061516282615121565b602082019050919050565b600060208201905081810360008301526151868161514a565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006151c3601283614745565b91506151ce8261518d565b602082019050919050565b600060208201905081810360008301526151f2816151b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061525e600d83614745565b915061526982615228565b602082019050919050565b6000602082019050818103600083015261528d81615251565b9050919050565b61529d81614dfe565b81146152a857600080fd5b50565b6000815190506152ba81615294565b92915050565b6000602082840312156152d6576152d561467a565b5b60006152e4848285016152ab565b9150509291505056fea2646970667358221220f7dd37b962b03307b9a47a02325dafb33edc00117a2875af89644526ff48de4064736f6c63430008110033 -\ No newline at end of file +6101006040523480156200001257600080fd5b506040516200618438038062006184833981810160405281019062000038919062000863565b6801000000000000000083600f0b126200005157600080fd5b6200005b62000578565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b84565b508560079081620000bf919062000b84565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c9a565b60c08181525050620001126001620002a96401000000000262002e49176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016c84620002d06401000000000262002e6f176401000000009004565b600f0b60e081600f0b81525050620001a86000600260009054906101000a9004600f0b6000600162000324640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ce5565b6000677fffffffffffffff821115620002c157600080fd5b6040829060020a029050919050565b60008082600f0b13620002e257600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af6200030f84620003a8640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b6200032e62000578565b6200033862000578565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003ba57600080fd5b60008083600f0b9050680100000000000000008112620003f6576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811262000425576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000452576010819060008212600003808260020a82851804189250505090506010820191505b61010081126200047e576008819060008212600003808260020a82851804189250505090506008820191505b60108112620004a9576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004d4576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004e4576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156200056b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000511565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061d82620005d2565b810181811067ffffffffffffffff821117156200063f576200063e620005e3565b5b80604052505050565b600062000654620005b4565b905062000662828262000612565b919050565b600067ffffffffffffffff821115620006855762000684620005e3565b5b6200069082620005d2565b9050602081019050919050565b60005b83811015620006bd578082015181840152602081019050620006a0565b60008484015250505050565b6000620006e0620006da8462000667565b62000648565b905082815260208101848484011115620006ff57620006fe620005cd565b5b6200070c8482856200069d565b509392505050565b600082601f8301126200072c576200072b620005c8565b5b81516200073e848260208601620006c9565b91505092915050565b600060ff82169050919050565b6200075f8162000747565b81146200076b57600080fd5b50565b6000815190506200077f8162000754565b92915050565b600081600f0b9050919050565b6200079d8162000785565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b6000819050919050565b620007d881620007c3565b8114620007e457600080fd5b50565b600081519050620007f881620007cd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082b82620007fe565b9050919050565b6200083d816200081e565b81146200084957600080fd5b50565b6000815190506200085d8162000832565b92915050565b60008060008060008060c08789031215620008835762000882620005be565b5b600087015167ffffffffffffffff811115620008a457620008a3620005c3565b5b620008b289828a0162000714565b965050602087015167ffffffffffffffff811115620008d657620008d5620005c3565b5b620008e489828a0162000714565b9550506040620008f789828a016200076e565b94505060606200090a89828a01620007ac565b93505060806200091d89828a01620007e7565b92505060a06200093089828a016200084c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099057607f821691505b602082108103620009a657620009a562000948565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d1565b62000a1f8683620009d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a6262000a5c62000a5684620007c3565b62000a37565b620007c3565b9050919050565b6000819050919050565b62000a7e8362000a41565b62000a9662000a8d8262000a69565b848454620009e1565b825550505050565b600090565b62000aad62000a9e565b62000aba81848462000a73565b505050565b5b8181101562000ae25762000ad660008262000aa3565b60018101905062000ac0565b5050565b601f82111562000b315762000afb81620009ac565b62000b0684620009c1565b8101602085101562000b16578190505b62000b2e62000b2585620009c1565b83018262000abf565b50505b505050565b60008160020a8304905092915050565b600062000b596000198460080262000b36565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200093d565b67ffffffffffffffff81111562000bab5762000baa620005e3565b5b62000bb7825462000977565b62000bc482828562000ae6565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009ac565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca782620007c3565b915062000cb483620007c3565b925082820262000cc481620007c3565b9150828204841483151762000cde5762000cdd62000c6b565b5b5092915050565b60805160a05160c05160e05161541f62000d65600039600081816111d10152818161160f015281816123df0152612a5d015260008181611ba2015281816123a2015281816129b501528181612bf90152612d1f015260008181611bce01528181612c2501528181612d400152612d850152600061166d015261541f6000f3fe608060405234801561001057600080fd5b50600436106103b6576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e11610206578063a457c2d71161012c578063d7a52fa9116100ca578063e69571af11610099578063e69571af14610c1f578063e809529514610c4f578063eda4e6d614610c6d578063f2fde38b14610c8b576103b6565b8063d7a52fa914610b85578063d89135cd14610ba1578063da2824a814610bbf578063e54063a614610bef576103b6565b8063b470aade11610106578063b470aade14610afb578063c0ab707714610b19578063d340ef8a14610b49578063d5abeb0114610b67576103b6565b8063a457c2d714610a7d578063a9059cbb14610aad578063b1cb0db314610add576103b6565b806379ba5097116101a45780638f0b2d5d116101735780638f0b2d5d146109f55780638f1df6bc14610a1157806395d89b4114610a2f578063983b2d5614610a4d576103b6565b806379ba50971461096b57806384dde4af1461098957806386fe212d146109a75780638da5cb5b146109d7576103b6565b8063731f237c116101e0578063731f237c146108e157806373f42561146108ff5780637445e33a1461091d57806374bedb951461094d576103b6565b80636a2d094e146108655780636f8b44b01461089557806370a08231146108b1576103b6565b80633092afd5116102eb578063449a52f81161028957806358b2833b1161025857806358b2833b146107c95780635ae06f7e146107e75780635f408c04146108175780636787a9be14610835576103b6565b8063449a52f81461070957806347a50517146107395780634abfbba21461076957806351b4541c14610799576103b6565b806331a5995d116102c557806331a5995d1461066d578063395093511461068b57806340452d91146106bb57806342966c68146106ed576103b6565b80633092afd5146105ef578063313334871461061f578063313ce5671461064f576103b6565b80631989c6a81161035857806323a859441161033257806323a859441461052f57806323b872dd1461055f5780632a7aec091461058f5780632c1758c1146105bf576103b6565b80631989c6a8146104c3578063213d1e1e146104e1578063229ba19714610511576103b6565b806309f28f3c1161039457806309f28f3c1461043957806311c566151461045757806318160ddd1461048757806318cbbcfc146104a5576103b6565b806301ffc9a7146103bb57806306fdde03146103eb578063095ea7b314610409575b600080fd5b6103d560048036038101906103d091906147d3565b610cbb565b6040516103e2919061481b565b60405180910390f35b6103f3610e61565b60405161040091906148c6565b60405180910390f35b610423600480360381019061041e919061497c565b610eef565b604051610430919061481b565b60405180910390f35b61044161112b565b60405161044e91906149d8565b60405180910390f35b610471600480360381019061046c9190614a1f565b61113e565b60405161047e9190614a6e565b60405180910390f35b61048f61118e565b60405161049c9190614a6e565b60405180910390f35b6104ad6111a5565b6040516104ba9190614a6e565b60405180910390f35b6104cb6111aa565b6040516104d89190614a6e565b60405180910390f35b6104fb60048036038101906104f69190614c2a565b6111b6565b6040516105089190614a6e565b60405180910390f35b6105196111cf565b60405161052691906149d8565b60405180910390f35b61054960048036038101906105449190614c2a565b6111f3565b604051610556919061481b565b60405180910390f35b61057960048036038101906105749190614c57565b61125b565b604051610586919061481b565b60405180910390f35b6105a960048036038101906105a49190614c2a565b611479565b6040516105b691906149d8565b60405180910390f35b6105d960048036038101906105d49190614caa565b6114b1565b6040516105e6919061481b565b60405180910390f35b61060960048036038101906106049190614cd7565b6114e4565b604051610616919061481b565b60405180910390f35b61063960048036038101906106349190614d04565b6115ee565b6040516106469190614a6e565b60405180910390f35b61065761166b565b6040516106649190614a6e565b60405180910390f35b61067561168f565b6040516106829190614a6e565b60405180910390f35b6106a560048036038101906106a0919061497c565b611695565b6040516106b2919061481b565b60405180910390f35b6106d560048036038101906106d09190614caa565b61182b565b6040516106e493929190614d71565b60405180910390f35b61070760048036038101906107029190614caa565b61189a565b005b610723600480360381019061071e919061497c565b6119d6565b604051610730919061481b565b60405180910390f35b610753600480360381019061074e9190614cd7565b611b55565b6040516107609190614a6e565b60405180910390f35b610783600480360381019061077e9190614caa565b611b9e565b6040516107909190614a6e565b60405180910390f35b6107b360048036038101906107ae9190614caa565b611bfe565b6040516107c09190614a6e565b60405180910390f35b6107d1611c1f565b6040516107de9190614a6e565b60405180910390f35b61080160048036038101906107fc9190614cd7565b611c25565b60405161080e919061481b565b60405180910390f35b61081f611c37565b60405161082c9190614dc4565b60405180910390f35b61084f600480360381019061084a9190614caa565b611d04565b60405161085c9190614a6e565b60405180910390f35b61087f600480360381019061087a9190614caa565b611d45565b60405161088c9190614a6e565b60405180910390f35b6108af60048036038101906108aa9190614caa565b611d66565b005b6108cb60048036038101906108c69190614cd7565b611e2e565b6040516108d89190614a6e565b60405180910390f35b6108e9611e98565b6040516108f69190614a6e565b60405180910390f35b610907611ea9565b6040516109149190614a6e565b60405180910390f35b61093760048036038101906109329190614c2a565b611eaf565b6040516109449190614a6e565b60405180910390f35b610955611edd565b6040516109629190614a6e565b60405180910390f35b610973611ee3565b604051610980919061481b565b60405180910390f35b61099161208a565b60405161099e9190614dee565b60405180910390f35b6109c160048036038101906109bc9190614caa565b6120b0565b6040516109ce9190614a6e565b60405180910390f35b6109df61218f565b6040516109ec9190614dee565b60405180910390f35b610a0f6004803603810190610a0a9190614cd7565b6121b5565b005b610a1961226a565b604051610a26919061481b565b60405180910390f35b610a3761252b565b604051610a4491906148c6565b60405180910390f35b610a676004803603810190610a629190614cd7565b6125b9565b604051610a74919061481b565b60405180910390f35b610a976004803603810190610a92919061497c565b61268d565b604051610aa4919061481b565b60405180910390f35b610ac76004803603810190610ac2919061497c565b6128ac565b604051610ad4919061481b565b60405180910390f35b610ae56129ad565b604051610af29190614a6e565b60405180910390f35b610b036129b3565b604051610b109190614a6e565b60405180910390f35b610b336004803603810190610b2e9190614caa565b6129d7565b604051610b409190614a6e565b60405180910390f35b610b51612b5e565b604051610b5e9190614a6e565b60405180910390f35b610b6f612b64565b604051610b7c9190614a6e565b60405180910390f35b610b9f6004803603810190610b9a9190614caa565b612b6a565b005b610ba9612c69565b604051610bb69190614a6e565b60405180910390f35b610bd96004803603810190610bd49190614cd7565b612c73565b604051610be6919061481b565b60405180910390f35b610c096004803603810190610c049190614c2a565b612c85565b604051610c169190614a6e565b60405180910390f35b610c396004803603810190610c349190614e09565b612c99565b604051610c469190614edf565b60405180910390f35b610c57612d19565b604051610c649190614f25565b60405180910390f35b610c75612d83565b604051610c829190614a6e565b60405180910390f35b610ca56004803603810190610ca09190614cd7565b612da7565b604051610cb2919061481b565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d0f5760019050610e5c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d615760019050610e5c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610db35760019050610e5c565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e055760019050610e5c565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e575760019050610e5c565b600090505b919050565b60068054610e6e90614f6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614f6f565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b505050505081565b6000806000610efc611c37565b905060028160ff1603610f1457600092505050611125565b60008160ff161115610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614fec565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110245760008414611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90615058565b60405180910390fd5b5b61102c61226a565b5061103684611d04565b915081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516111169190614a6e565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b60008061116561114d85612e49565b61116061115a6001612e49565b86612eb1565b612f18565b905061117081612f97565b67ffffffffffffffff168461118591906150a7565b91505092915050565b6000600b546008546111a091906150a7565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080826000015163ffffffff1611156112105760009050611256565b6000826020015168ffffffffffffffffff1611156112315760009050611256565b6000826040015167ffffffffffffffff1611156112515760009050611256565b600190505b919050565b600080600080611269611c37565b905060028160ff16036112825760009350505050611472565b60008160ff1611156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090614fec565b60405180910390fd5b6112d161226a565b506112db85611d04565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561136657600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113f291906150a7565b92505081905550611404878785612fcc565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114639190614a6e565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036114a8576114a56001612e49565b90505b80915050919050565b6000600f82106114c057600080fd5b600082036114d557600f6012541490506114df565b8160125483161490505b919050565b60006114f3600160ff166114b1565b156114fd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061158457503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61158d57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000806115fd86612e49565b925061160885612e49565b91506116347f000000000000000000000000000000000000000000000000000000000000000083612f18565b905061163f81612ff1565b905061164b8382612f18565b905061165681612f97565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b6000806116a061226a565b506116aa83611d04565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461173891906150db565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516118189190614a6e565b60405180910390a3600191505092915050565b6000818154811061183b57600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b60006118a4611c37565b60ff16146118b157600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661190757600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561195357600080fd5b600061195e82611d04565b905061196a338261307e565b5081600b600082825461197d91906150db565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516119ca9190614a6e565b60405180910390a25050565b60008060006119e3611c37565b60ff16146119f057600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a739061515b565b60405180910390fd5b611a8461226a565b5060006011541115611aad5760115483600854611aa191906150db565b1115611aac57600080fd5b5b8260086000828254611abf91906150db565b92505081905550611acf83611d04565b9050611adb8482613185565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611b399190614a6e565b60405180910390a3611b49613249565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611bcc919061517b565b7f0000000000000000000000000000000000000000000000000000000000000000611bf791906150db565b9050919050565b6000603c8242611c0e91906150a7565b611c1891906151ec565b9050919050565b60035481565b6000611c30826114e4565b9050919050565b6000601060009054906101000a900460ff1615611c575760019050611d01565b6000600f5403611c6a5760009050611d01565b600f544210611cfc57611c97603c600354611c8591906151ec565b600f54611c9291906150a7565b6129d7565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611ce29190614a6e565b60405180910390a1611cf261226a565b5060029050611d01565b600090505b90565b600080611d28611d1384612e49565b600260009054906101000a9004600f0b61340d565b9050611d3381612f97565b67ffffffffffffffff16915050919050565b6000603c8242611d5591906150a7565b611d5f91906151ec565b9050919050565b611d73600860ff166114b1565b15611d7d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd757600080fd5b611ddf61118e565b8111611dea57600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611e1c9190614a6e565b60405180910390a28060118190555050565b6000806000806000611e47611e4287611b55565b612e49565b9350611e54600354611bfe565b9150611e6f84600260009054906101000a9004600f0b612f18565b9250611e8d611e7d84612f97565b67ffffffffffffffff16836115ee565b945050505050919050565b6000611ea460006129d7565b905090565b600b5481565b6000806000611ebd846111b6565b9150611ec884611479565b9050611ed4828261113e565b92505050919050565b600a5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601082106120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90615269565b60405180910390fd5b600060125483161461213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906152d5565b60405180910390fd5b816012600082825417925050819055507fdd5e7cad9599c1dcaa8d5adcd88f157fc5fada62511c0d3edb1bfd3b778acc4160125460405161217d9190614a6e565b60405180910390a16012549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121c2600260ff166114b1565b156121cc57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461222657600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612274614730565b61227c614730565b612284614730565b6000806000806000612294611e98565b5061229d613499565b97506122a8886111f3565b156122be57600098505050505050505050612528565b6000600954815481106122d4576122d36152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050955061238188612c85565b945060018561239091906150db565b905061239b86611479565b9350603c857f00000000000000000000000000000000000000000000000000000000000000006123cb919061517b565b6123d591906151ec565b915061241161240c7f000000000000000000000000000000000000000000000000000000000000000061240785612e49565b612f18565b612ff1565b925061242760008461242161118e565b84612c99565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506124e38761362f565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516125139190614a6e565b60405180910390a16001985050505050505050505b90565b6007805461253890614f6f565b80601f016020809104026020016040519081016040528092919081815260200182805461256490614f6f565b80156125b15780601f10612586576101008083540402835291602001916125b1565b820191906000526020600020905b81548152906001019060200180831161259457829003601f168201915b505050505081565b60006125c8600160ff166114b1565b156125d257600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461262c57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008061269983611d04565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561272457600080fd5b61272c61226a565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b991906150a7565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516128999190614a6e565b60405180910390a3600191505092915050565b6000806000806128ba611c37565b905060028160ff16036128d357600093505050506129a7565b60008160ff16111561291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614fec565b60405180910390fd5b61292261226a565b5061292c85611d04565b9250612939338785612fcc565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129989190614a6e565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612a01576000945050505050612b59565b612a0c600354611bfe565b925060008303612a23576000945050505050612b59565b600260009054906101000a9004600f0b9050600086118015612a4457508286105b15612a4d578592505b612a5683612e49565b9150612a827f000000000000000000000000000000000000000000000000000000000000000083612f18565b9350612a8d84612ff1565b9350612aa8600260009054906101000a9004600f0b85612f18565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612af0919061517b565b600354612afd91906150db565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612b4991906149d8565b60405180910390a4829450505050505b919050565b60095481565b60115481565b6000612b79600460ff166114b1565b15612b8357600080fd5b601060009054906101000a900460ff1615612b9d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bf757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612c23919061517b565b7f0000000000000000000000000000000000000000000000000000000000000000612c4e91906150db565b9050600f548111612c5e57600080fd5b80600f819055505050565b6000600b54905090565b6000612c7e826125b9565b9050919050565b6000816000015163ffffffff169050919050565b612ca1614730565b612ca9614730565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612d6a91906150a7565b612d7491906151ec565b612d7e91906150db565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e0357600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612e6057600080fd5b6040829060020a029050919050565b60008082600f0b13612e8057600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612e9c8461374e565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612f0557506f7fffffffffffffffffffffffffffffff600f0b8113155b612f0e57600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612f8457506f7fffffffffffffffffffffffffffffff600f0b8113155b612f8d57600080fd5b8091505092915050565b60008082600f0b1215612fa957600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b600080612fd9858461307e565b50612fe48484613185565b5060019150509392505050565b60006840000000000000000082600f0b1261300b57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b121561303f5760009050613079565b6130766080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a828518041892505050613914565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036130da576000935050505061317f565b6130e386611b55565b925084831015613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f90615370565b60405180910390fd5b848361313491906150a7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036131e15760009350505050613243565b6131ea86611b55565b925084836131f891906150db565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000613253614730565b600061325d61118e565b90506000600160008054905061327391906150a7565b81548110613284576132836152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff1681525050816000600160008054905061335f91906150a7565b815481106133705761336f6152f5565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361341e57600080fd5b600082600f0b604085600f0b9060020a028161343d5761343c6151bd565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561348657506f7fffffffffffffffffffffffffffffff600f0b8113155b61348f57600080fd5b8091505092915050565b6134a1614730565b6134a9614730565b6134b1614730565b600080600954815481106134c8576134c76152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156135d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f791906153bc565b6fffffffffffffffffffffffffffffffff16905061361483612c85565b81116136255781935050505061362c565b8293505050505b90565b600080600061363d84611eaf565b61364561118e565b61364f91906150a7565b9150600a5461365d83611d04565b61366791906150a7565b9050613695600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613185565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3846040516137099190614a6e565b60405180910390a360016009600082825461372491906150db565b9250508190555080600a600082825461373d91906150db565b925050819055508192505050919050565b60008082600f0b1361375f57600080fd5b60008083600f0b905068010000000000000000811261379a576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126137c8576020819060008212600003808260020a82851804189250505090506020820191505b6201000081126137f4576010819060008212600003808260020a82851804189250505090506010820191505b610100811261381f576008819060008212600003808260020a82851804189250505090506008820191505b60108112613849576004819060008212600003808260020a82851804189250505090506004820191505b60048112613873576002819060008212600003808260020a82851804189250505090506002820191505b60028112613882576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b6000811315613907578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a82851804189250505090506138af565b5081945050505050919050565b60006840000000000000000082600f0b1261392e57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613962576000905061472b565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b13156139b057608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b13156139e95760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613a225760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613a5b57608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613a945760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613acd576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613b0657608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613b3f576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613b7757608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613baf5760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613be7576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613c1f5760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613c57576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613c8f57608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613cc75760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613cff57608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613d365760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613d6d576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613da457608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613ddb576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613e1257608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613e495760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613e80576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613eb75760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613eed576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b1315613f2357608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b1315613f595760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b1315613f8f57608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b1315613fc55760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b1315613ffb576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b131561403157608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315614067576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561409c57608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156140d15760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b1315614106576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b131561413b5760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b1315614170576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b13156141a557608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156141da5760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b131561420f57608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156142435760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b1315614277576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b13156142ab57608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b13156142df576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b131561431357608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156143475760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b131561437b576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156143af5760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b13156143e2576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b131561441557608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156144485760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561447b57608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156144ae5760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b13156144e1576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b131561451457608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b1315614547576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561457957608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156145ab5760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b13156145dd576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b131561460f5760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b1315614641576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b131561467357608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b13156146a55760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b13156146d757608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561472657600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6147b08161477b565b81146147bb57600080fd5b50565b6000813590506147cd816147a7565b92915050565b6000602082840312156147e9576147e8614776565b5b60006147f7848285016147be565b91505092915050565b60008115159050919050565b61481581614800565b82525050565b6000602082019050614830600083018461480c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614870578082015181840152602081019050614855565b60008484015250505050565b6000601f19601f8301169050919050565b600061489882614836565b6148a28185614841565b93506148b2818560208601614852565b6148bb8161487c565b840191505092915050565b600060208201905081810360008301526148e0818461488d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614913826148e8565b9050919050565b61492381614908565b811461492e57600080fd5b50565b6000813590506149408161491a565b92915050565b6000819050919050565b61495981614946565b811461496457600080fd5b50565b60008135905061497681614950565b92915050565b6000806040838503121561499357614992614776565b5b60006149a185828601614931565b92505060206149b285828601614967565b9150509250929050565b600081600f0b9050919050565b6149d2816149bc565b82525050565b60006020820190506149ed60008301846149c9565b92915050565b6149fc816149bc565b8114614a0757600080fd5b50565b600081359050614a19816149f3565b92915050565b60008060408385031215614a3657614a35614776565b5b6000614a4485828601614967565b9250506020614a5585828601614a0a565b9150509250929050565b614a6881614946565b82525050565b6000602082019050614a836000830184614a5f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614ac68261487c565b810181811067ffffffffffffffff82111715614ae557614ae4614a8e565b5b80604052505050565b6000614af861476c565b9050614b048282614abd565b919050565b600063ffffffff82169050919050565b614b2281614b09565b8114614b2d57600080fd5b50565b600081359050614b3f81614b19565b92915050565b600068ffffffffffffffffff82169050919050565b614b6381614b45565b8114614b6e57600080fd5b50565b600081359050614b8081614b5a565b92915050565b600067ffffffffffffffff82169050919050565b614ba381614b86565b8114614bae57600080fd5b50565b600081359050614bc081614b9a565b92915050565b600060608284031215614bdc57614bdb614a89565b5b614be66060614aee565b90506000614bf684828501614b30565b6000830152506020614c0a84828501614b71565b6020830152506040614c1e84828501614bb1565b60408301525092915050565b600060608284031215614c4057614c3f614776565b5b6000614c4e84828501614bc6565b91505092915050565b600080600060608486031215614c7057614c6f614776565b5b6000614c7e86828701614931565b9350506020614c8f86828701614931565b9250506040614ca086828701614967565b9150509250925092565b600060208284031215614cc057614cbf614776565b5b6000614cce84828501614967565b91505092915050565b600060208284031215614ced57614cec614776565b5b6000614cfb84828501614931565b91505092915050565b60008060408385031215614d1b57614d1a614776565b5b6000614d2985828601614967565b9250506020614d3a85828601614967565b9150509250929050565b614d4d81614b09565b82525050565b614d5c81614b45565b82525050565b614d6b81614b86565b82525050565b6000606082019050614d866000830186614d44565b614d936020830185614d53565b614da06040830184614d62565b949350505050565b600060ff82169050919050565b614dbe81614da8565b82525050565b6000602082019050614dd96000830184614db5565b92915050565b614de881614908565b82525050565b6000602082019050614e036000830184614ddf565b92915050565b60008060008060808587031215614e2357614e22614776565b5b6000614e3187828801614967565b9450506020614e4287828801614a0a565b9350506040614e5387828801614967565b9250506060614e6487828801614967565b91505092959194509250565b614e7981614b09565b82525050565b614e8881614b45565b82525050565b614e9781614b86565b82525050565b606082016000820151614eb36000850182614e70565b506020820151614ec66020850182614e7f565b506040820151614ed96040850182614e8e565b50505050565b6000606082019050614ef46000830184614e9d565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b614f1f81614efa565b82525050565b6000602082019050614f3a6000830184614f16565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f8757607f821691505b602082108103614f9a57614f99614f40565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b6000614fd6600783614841565b9150614fe182614fa0565b602082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000615042600a83614841565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150b282614946565b91506150bd83614946565b92508282039050818111156150d5576150d4615078565b5b92915050565b60006150e682614946565b91506150f183614946565b925082820190508082111561510957615108615078565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615145600a83614841565b91506151508261510f565b602082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b600061518682614946565b915061519183614946565b925082820261519f81614946565b915082820484148315176151b6576151b5615078565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151f782614946565b915061520283614946565b925082615212576152116151bd565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b6000615253601183614841565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006152bf601283614841565b91506152ca82615289565b602082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061535a600d83614841565b915061536582615324565b602082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b61539981614efa565b81146153a457600080fd5b50565b6000815190506153b681615390565b92915050565b6000602082840312156153d2576153d1614776565b5b60006153e0848285016153a7565b9150509291505056fea264697066735822122061d48fdedb03bbb6777540bb23e934a60aece815f70f2549550b05f804f37d7364736f6c63430008110033 +\ No newline at end of file diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_taxLevel","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":"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":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":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":[],"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":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleCap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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 DemurrageTokenSingleCap.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":"nonpayable","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"}],"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":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"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 DemurrageTokenSingleCap.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 DemurrageTokenSingleCap.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 DemurrageTokenSingleCap.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 DemurrageTokenSingleCap.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":"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"}] +[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_taxLevel","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":"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":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":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"view","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":"nonpayable","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":"nonpayable","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"}],"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":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"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":"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"}] diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol @@ -138,7 +138,7 @@ contract DemurrageTokenSingleNocap { // ACL setup owner = msg.sender; - minter[owner] = true; + // minter[owner] = true; // ERC20 setup name = _name; @@ -228,6 +228,9 @@ contract DemurrageTokenSingleNocap { minter[_minter] = true; return true; } + function addWriter(address _minter) public returns (bool) { + return addMinter(_minter); + } // Given address will no longer be allowed to call the mintTo() function function removeMinter(address _minter) public returns (bool) { @@ -236,6 +239,9 @@ contract DemurrageTokenSingleNocap { minter[_minter] = false; return true; } + function deleteWriter(address _minter) public returns (bool) { + return removeMinter(_minter); + } /// Implements ERC20 function balanceOf(address _account) public view returns (uint256) { @@ -299,7 +305,8 @@ contract DemurrageTokenSingleNocap { require(applyExpiry() == 0); require(minter[msg.sender], 'ERR_ACCESS'); -changePeriod(); + + changePeriod(); if (maxSupply > 0) { require(supply + _amount <= maxSupply); }