@gooddollar/goodprotocol 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  2. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  3. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  4. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  5. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  6. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  7. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  8. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  9. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  10. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  11. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  12. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  13. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  14. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  15. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  16. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  17. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  23. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  28. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  29. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  30. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  31. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  32. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +62 -4
  33. package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  34. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  35. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  36. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +17 -17
  37. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  38. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  39. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  40. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  41. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  42. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  43. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  44. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  45. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  46. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  47. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  48. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  49. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  50. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  51. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  60. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  61. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  62. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  63. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  64. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  65. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  66. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  67. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  68. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  69. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  70. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  71. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  72. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  73. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  74. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  75. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  76. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  77. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  78. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  79. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  80. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  81. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  82. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  83. package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  84. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  85. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  86. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  87. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  88. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  89. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  90. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  91. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  92. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  93. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  94. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  95. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  96. package/contracts/governance/GReputation.sol +53 -14
  97. package/contracts/governance/Reputation.sol +13 -25
  98. package/package.json +1 -1
  99. package/releases/deployment.json +45 -45
  100. package/releases/olddao.json +1 -1
  101. package/scripts/misc/goodgiveback.ts +4 -5
  102. package/test/governance/ClaimersDistribution.test.ts +5 -5
  103. package/test/governance/CompoundVotingMachine.castvote.test.ts +1 -1
  104. package/test/governance/CompoundVotingMachine.daoscheme.ts +1 -1
  105. package/test/governance/CompoundVotingMachine.guardian.test.ts +1 -1
  106. package/test/governance/GReputation.test.ts +49 -18
  107. package/test/governance/GovernanceStaking.test.ts +71 -47
  108. package/test/governance/Reputation.test.ts +52 -51
  109. package/test/governance/StakersDistribution.test.ts +12 -8
@@ -856,8 +856,8 @@
856
856
  "type": "function"
857
857
  }
858
858
  ],
859
- "bytecode": "0x60a06040523060601b60805234801561001757600080fd5b5060805160601c612a5161004b60003960008181610b8c01528181610bcc0152818161100901526110490152612a516000f3fe6080604052600436106101d65760003560e01c8063013eba92146101db578063069786ea1461021b5780630ce82d67146102455780631248b1011461025a5780631794bb3c146102915780631b3c90a8146102b35780631bbc644c146102c85780631d8f5ea9146102f857806322b457271461030e5780633659cfe6146103245780633d84ceca146103445780633e6326fc146103645780634162169f146103915780634202d214146103b1578063456ac1c2146103d15780634e71d92d146103eb5780634f1ef286146104005780635231e2f014610413578063560796d1146104435780635aef7de6146104945780635c9302c9146104b457806373b2e80e146104ca578063741470ac146104ea5780638081cbbd1461050057806398d6621b146105205780639dc2c03314610535578063a21f698a1461054b578063b656223d1461056b578063ba07541014610581578063c033abf214610597578063c1337508146105ad578063c7713870146105cd578063c7a76adf146105e2578063cc054dfc14610602578063cef636001461062f578063d7c4cbb81461064f578063dddc361614610665578063de1de3a01461067a578063e1758bd81461069a578063eac471a0146106af578063eda4e6d6146106c5575b600080fd5b3480156101e757600080fd5b506102086101f6366004612402565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561022757600080fd5b506102306106db565b60408051928352602083019190915201610212565b34801561025157600080fd5b50610208610719565b34801561026657600080fd5b5061023061027536600461241f565b609a602052600090815260409020600181015460029091015482565b34801561029d57600080fd5b506102b16102ac366004612438565b61073c565b005b3480156102bf57600080fd5b506102b16108b4565b3480156102d457600080fd5b506102e86102e3366004612402565b6109f9565b6040519015158152602001610212565b34801561030457600080fd5b50610208609e5481565b34801561031a57600080fd5b5061020860a05481565b34801561033057600080fd5b506102b161033f366004612402565b610b81565b34801561035057600080fd5b506102b161035f36600461241f565b610c4a565b34801561037057600080fd5b50606754610384906001600160a01b031681565b6040516102129190612479565b34801561039d57600080fd5b50606554610384906001600160a01b031681565b3480156103bd57600080fd5b506102e86103cc366004612402565b610ce8565b3480156103dd57600080fd5b5060a3546102e89060ff1681565b3480156103f757600080fd5b506102e8610d4a565b6102b161040e3660046124fa565b610ffe565b34801561041f57600080fd5b506102e861042e366004612402565b60aa6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061047d61045e36600461241f565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610212565b3480156104a057600080fd5b50606654610384906001600160a01b031681565b3480156104c057600080fd5b50610208609c5481565b3480156104d657600080fd5b506102e86104e5366004612402565b6110b8565b3480156104f657600080fd5b5061020860a75481565b34801561050c57600080fd5b5060a854610384906001600160a01b031681565b34801561052c57600080fd5b506102086110e4565b34801561054157600080fd5b5061020860a55481565b34801561055757600080fd5b506102e8610566366004612402565b61120b565b34801561057757600080fd5b5061020860a25481565b34801561058d57600080fd5b5061020860a65481565b3480156105a357600080fd5b50610208609f5481565b3480156105b957600080fd5b506102086105c836600461258c565b611239565b3480156105d957600080fd5b506102086113dd565b3480156105ee57600080fd5b506102086105fd36600461241f565b6114ce565b34801561060e57600080fd5b5061020861061d366004612402565b60ab6020526000908152604090205481565b34801561063b57600080fd5b5061020861064a36600461241f565b6114e3565b34801561065b57600080fd5b5061020860a15481565b34801561067157600080fd5b506102b16114f8565b34801561068657600080fd5b506102b161069536600461264b565b611557565b3480156106a657600080fd5b506103846115a6565b3480156106bb57600080fd5b5061020860a45481565b3480156106d157600080fd5b50610208609d5481565b600080600062015180609d54426106f2919061267e565b6106fc9190612695565b9050610707816114ce565b610710826114e3565b92509250509091565b60006201518060a6544261072d919061267e565b6107379190612695565b905090565b600054610100900460ff1680610755575060005460ff16155b6107bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107df576000805461ffff19166101011790555b6000821161082f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016107b4565b6108388461163d565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561087b6201518042612695565b61088890620151806126b7565b6108949061a8c06126d6565b609d81905560a65580156108ae576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a91906126ee565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906126ee565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d54118015610a0e5750609d544210155b610a2a5760405162461bcd60e51b81526004016107b49061270b565b610a338261120b565b8015610a455750610a4382610ce8565b155b610a8b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b60448201526064016107b4565b6001600160a01b038216600090815260aa602052604090205460ff1615610ae55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b60448201526064016107b4565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610b10611660565b9050600160a06000828254610b25919061267e565b90915550610b38905033826000806118e1565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bca5760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bfc611b96565b6001600160a01b031614610c225760405162461bcd60e51b81526004016107b490612773565b610c2b81611bb2565b60408051600080825260208201909252610c4791839190611bba565b50565b610c52611cfa565b60008111610cac5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016107b4565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610d0a8361120b565b15610d4157600062015180610d1f834261267e565b610d299190612695565b905060a254811015610d3f575060019392505050565b505b50600092915050565b600080609d54118015610d5f5750609d544210155b610d7b5760405162461bcd60e51b81526004016107b49061270b565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f91906126ee565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e3a9190612479565b60206040518083038186803b158015610e5257600080fd5b505afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a91906127ad565b610ed35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016107b4565b6000610ede33611dce565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906126ee565b9050818015610f9457506001600160a01b03811615155b15610ff85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fc5903390600401612479565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110475760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611079611b96565b6001600160a01b03161461109f5760405162461bcd60e51b81526004016107b490612773565b6110a882611bb2565b6110b482826001611bba565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110f95750609d544210155b6111155760405162461bcd60e51b81526004016107b49061270b565b61111e3361120b565b1580611139575033600090815260aa602052604090205460ff165b156111c45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118c57600080fd5b505afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906127ca565b62015180609d54426111d6919061267e565b6111e09190612695565b609c541415611203576111f2336110b8565b6111fd5750609e5490565b50600090565b6107376113dd565b6001600160a01b0381166000908152609b60205260408120541561123157506001919050565b506000919050565b600080609d5411801561124e5750609d544210155b61126a5760405162461bcd60e51b81526004016107b49061270b565b60005b82518110156113af57609f545a10156112a7576040518181526000805160206129fc8339815191529060200160405180910390a192915050565b6112c98382815181106112bc576112bc6127e3565b602002602001015161120b565b80156112f457506112f28382815181106112e5576112e56127e3565b6020026020010151610ce8565b155b801561133a575060aa6000848381518110611311576113116127e3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b1561139f57611361838281518110611354576113546127e3565b60200260200101516109f9565b61139f5760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016107b4565b6113a8816127f9565b905061126d565b506000805160206129fc83398151915282516040516113d091815260200190565b60405180910390a1505190565b6000806113e86115a6565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114139190612479565b60206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146391906127ca565b9050600060a55460a454836114789190612695565b119050600060a5549050600060a75461148f610719565b1015806114995750825b156114ae5760a4546114ab9085612695565b91505b60a054156114c65760a0546114c39083612695565b90505b949350505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b600062015180609d544261150c919061267e565b6115169190612695565b9050609c54811115610c4757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610cdd565b61155f611cfa565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cdd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906126ee565b606780546001600160a01b0319166001600160a01b038316179055610c476108b4565b600061166a6114f8565b60a154609c54146118da57600061167f6115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116af9190612479565b60206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906127ca565b9050600060a55460a454836117149190612695565b11905060a754611722610719565b10158061172c5750805b156118445760a35460ff161561174457611744611eec565b6040516370a0823160e01b81526001600160a01b038416906370a0823190611770903090600401612479565b60206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906127ca565b915060a454826117d09190612695565b60a55560a45460a7556117e5610e1042612695565b6117f190610e106126b7565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a054156118905760a05460a55461188c9190612695565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b81806118ea5750805b15611978576001609a6000609c548152602001908152602001600020600101600082825461191891906126d6565b9091555050609c546000908152609a602090815260408083206001600160a01b03881684528252808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916119729084906126d6565b90915550505b8015611a625760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119af908890600401612479565b602060405180830381600087803b1580156119c957600080fd5b505af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0191906127ca565b905080609a6000609c5481526020019081526020016000206002016000828254611a2b91906126d6565b90915550506040518181526001600160a01b038616906000805160206129958339815191529060200160405180910390a2506108ae565b8115611abe57609c546000908152609a602052604081206002018054859290611a8c9084906126d6565b90915550506040518381526001600160a01b038516906000805160206129958339815191529060200160405180910390a25b6000611ac86115a6565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611af99088908890600401612814565b602060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b91906127ad565b611b8f5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016107b4565b5050505050565b6000805160206129b5833981519152546001600160a01b031690565b610c47611cfa565b6000611bc4611b96565b9050611bcf846121ef565b600083511180611bdc5750815b15611bed57611beb8484612282565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b8f57805460ff19166001178155604051611c68908690611c39908590602401612479565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612282565b50805460ff19168155611c79611b96565b6001600160a01b0316826001600160a01b031614611cf15760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b60648201526084016107b4565b611b8f8561236d565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7691906126ee565b6001600160a01b031614611dcc5760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016107b4565b565b600080611dd9611660565b9050611de48361120b565b8015611e0957506001600160a01b038316600090815260aa602052604090205460ff16155b8015611e1b5750611e19836110b8565b155b15611e3757611e2e8382600160006118e1565b50600192915050565b611e408361120b565b1580611e6457506001600160a01b038316600090815260aa602052604090205460ff165b15610d4157600160a06000828254611e7c91906126d6565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611eaf9084908060016118e1565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ef66115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f269190612479565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7691906127ca565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611fae9290911690600401612479565b60206040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe91906127ca565b6065546040519192506001600160a01b03169063d1b7089a9085906120299030908690602401612814565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526120849392916001600160a01b031690600090600401612885565b600060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120da91908101906128b9565b50600090506120e982846126d6565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612118903090600401612479565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906127ca565b81146121b05760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016107b4565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6122535760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107b4565b6000805160206129b583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107b4565b600080846001600160a01b0316846040516122fc9190612945565b600060405180830381855af49150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915061236482826040518060600160405280602781526020016129d5602791396123ad565b95945050505050565b612376816121ef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156123bc5750816123e6565b8251156123cc5782518084602001fd5b8160405162461bcd60e51b81526004016107b49190612961565b9392505050565b6001600160a01b0381168114610c4757600080fd5b60006020828403121561241457600080fd5b81356123e6816123ed565b60006020828403121561243157600080fd5b5035919050565b60008060006060848603121561244d57600080fd5b8335612458816123ed565b92506020840135612468816123ed565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156124cb576124cb61248d565b604052919050565b60006001600160401b038211156124ec576124ec61248d565b50601f01601f191660200190565b6000806040838503121561250d57600080fd5b8235612518816123ed565b915060208301356001600160401b0381111561253357600080fd5b8301601f8101851361254457600080fd5b8035612557612552826124d3565b6124a3565b81815286602083850101111561256c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561259f57600080fd5b82356001600160401b03808211156125b657600080fd5b818501915085601f8301126125ca57600080fd5b8135818111156125dc576125dc61248d565b8060051b91506125ed8483016124a3565b818152918301840191848101908884111561260757600080fd5b938501935b838510156126315784359250612621836123ed565b828252938501939085019061260c565b98975050505050505050565b8015158114610c4757600080fd5b60006020828403121561265d57600080fd5b81356123e68161263d565b634e487b7160e01b600052601160045260246000fd5b60008282101561269057612690612668565b500390565b6000826126b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126d1576126d1612668565b500290565b600082198211156126e9576126e9612668565b500190565b60006020828403121561270057600080fd5b81516123e6816123ed565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061297583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061297583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156127bf57600080fd5b81516123e68161263d565b6000602082840312156127dc57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561280d5761280d612668565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b83811015612848578181015183820152602001612830565b838111156108ae5750506000910152565b6000815180845261287181602086016020860161282d565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526128a76080840187612859565b94166040830152506060015292915050565b600080604083850312156128cc57600080fd5b82516128d78161263d565b60208401519092506001600160401b038111156128f357600080fd5b8301601f8101851361290457600080fd5b8051612912612552826124d3565b81815286602083850101111561292757600080fd5b61293882602083016020860161282d565b8093505050509250929050565b6000825161295781846020870161282d565b9190910192915050565b6020815260006123e6602083018461285956fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220e0358f3cae833f8bc5943145617b72291b79c603771ce20eca08c465e1e5a15064736f6c63430008080033",
860
- "deployedBytecode": "0x6080604052600436106101d65760003560e01c8063013eba92146101db578063069786ea1461021b5780630ce82d67146102455780631248b1011461025a5780631794bb3c146102915780631b3c90a8146102b35780631bbc644c146102c85780631d8f5ea9146102f857806322b457271461030e5780633659cfe6146103245780633d84ceca146103445780633e6326fc146103645780634162169f146103915780634202d214146103b1578063456ac1c2146103d15780634e71d92d146103eb5780634f1ef286146104005780635231e2f014610413578063560796d1146104435780635aef7de6146104945780635c9302c9146104b457806373b2e80e146104ca578063741470ac146104ea5780638081cbbd1461050057806398d6621b146105205780639dc2c03314610535578063a21f698a1461054b578063b656223d1461056b578063ba07541014610581578063c033abf214610597578063c1337508146105ad578063c7713870146105cd578063c7a76adf146105e2578063cc054dfc14610602578063cef636001461062f578063d7c4cbb81461064f578063dddc361614610665578063de1de3a01461067a578063e1758bd81461069a578063eac471a0146106af578063eda4e6d6146106c5575b600080fd5b3480156101e757600080fd5b506102086101f6366004612402565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561022757600080fd5b506102306106db565b60408051928352602083019190915201610212565b34801561025157600080fd5b50610208610719565b34801561026657600080fd5b5061023061027536600461241f565b609a602052600090815260409020600181015460029091015482565b34801561029d57600080fd5b506102b16102ac366004612438565b61073c565b005b3480156102bf57600080fd5b506102b16108b4565b3480156102d457600080fd5b506102e86102e3366004612402565b6109f9565b6040519015158152602001610212565b34801561030457600080fd5b50610208609e5481565b34801561031a57600080fd5b5061020860a05481565b34801561033057600080fd5b506102b161033f366004612402565b610b81565b34801561035057600080fd5b506102b161035f36600461241f565b610c4a565b34801561037057600080fd5b50606754610384906001600160a01b031681565b6040516102129190612479565b34801561039d57600080fd5b50606554610384906001600160a01b031681565b3480156103bd57600080fd5b506102e86103cc366004612402565b610ce8565b3480156103dd57600080fd5b5060a3546102e89060ff1681565b3480156103f757600080fd5b506102e8610d4a565b6102b161040e3660046124fa565b610ffe565b34801561041f57600080fd5b506102e861042e366004612402565b60aa6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061047d61045e36600461241f565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610212565b3480156104a057600080fd5b50606654610384906001600160a01b031681565b3480156104c057600080fd5b50610208609c5481565b3480156104d657600080fd5b506102e86104e5366004612402565b6110b8565b3480156104f657600080fd5b5061020860a75481565b34801561050c57600080fd5b5060a854610384906001600160a01b031681565b34801561052c57600080fd5b506102086110e4565b34801561054157600080fd5b5061020860a55481565b34801561055757600080fd5b506102e8610566366004612402565b61120b565b34801561057757600080fd5b5061020860a25481565b34801561058d57600080fd5b5061020860a65481565b3480156105a357600080fd5b50610208609f5481565b3480156105b957600080fd5b506102086105c836600461258c565b611239565b3480156105d957600080fd5b506102086113dd565b3480156105ee57600080fd5b506102086105fd36600461241f565b6114ce565b34801561060e57600080fd5b5061020861061d366004612402565b60ab6020526000908152604090205481565b34801561063b57600080fd5b5061020861064a36600461241f565b6114e3565b34801561065b57600080fd5b5061020860a15481565b34801561067157600080fd5b506102b16114f8565b34801561068657600080fd5b506102b161069536600461264b565b611557565b3480156106a657600080fd5b506103846115a6565b3480156106bb57600080fd5b5061020860a45481565b3480156106d157600080fd5b50610208609d5481565b600080600062015180609d54426106f2919061267e565b6106fc9190612695565b9050610707816114ce565b610710826114e3565b92509250509091565b60006201518060a6544261072d919061267e565b6107379190612695565b905090565b600054610100900460ff1680610755575060005460ff16155b6107bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107df576000805461ffff19166101011790555b6000821161082f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016107b4565b6108388461163d565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561087b6201518042612695565b61088890620151806126b7565b6108949061a8c06126d6565b609d81905560a65580156108ae576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a91906126ee565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906126ee565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d54118015610a0e5750609d544210155b610a2a5760405162461bcd60e51b81526004016107b49061270b565b610a338261120b565b8015610a455750610a4382610ce8565b155b610a8b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b60448201526064016107b4565b6001600160a01b038216600090815260aa602052604090205460ff1615610ae55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b60448201526064016107b4565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610b10611660565b9050600160a06000828254610b25919061267e565b90915550610b38905033826000806118e1565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bca5760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bfc611b96565b6001600160a01b031614610c225760405162461bcd60e51b81526004016107b490612773565b610c2b81611bb2565b60408051600080825260208201909252610c4791839190611bba565b50565b610c52611cfa565b60008111610cac5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016107b4565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610d0a8361120b565b15610d4157600062015180610d1f834261267e565b610d299190612695565b905060a254811015610d3f575060019392505050565b505b50600092915050565b600080609d54118015610d5f5750609d544210155b610d7b5760405162461bcd60e51b81526004016107b49061270b565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f91906126ee565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e3a9190612479565b60206040518083038186803b158015610e5257600080fd5b505afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a91906127ad565b610ed35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016107b4565b6000610ede33611dce565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906126ee565b9050818015610f9457506001600160a01b03811615155b15610ff85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fc5903390600401612479565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110475760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611079611b96565b6001600160a01b03161461109f5760405162461bcd60e51b81526004016107b490612773565b6110a882611bb2565b6110b482826001611bba565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110f95750609d544210155b6111155760405162461bcd60e51b81526004016107b49061270b565b61111e3361120b565b1580611139575033600090815260aa602052604090205460ff165b156111c45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118c57600080fd5b505afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906127ca565b62015180609d54426111d6919061267e565b6111e09190612695565b609c541415611203576111f2336110b8565b6111fd5750609e5490565b50600090565b6107376113dd565b6001600160a01b0381166000908152609b60205260408120541561123157506001919050565b506000919050565b600080609d5411801561124e5750609d544210155b61126a5760405162461bcd60e51b81526004016107b49061270b565b60005b82518110156113af57609f545a10156112a7576040518181526000805160206129fc8339815191529060200160405180910390a192915050565b6112c98382815181106112bc576112bc6127e3565b602002602001015161120b565b80156112f457506112f28382815181106112e5576112e56127e3565b6020026020010151610ce8565b155b801561133a575060aa6000848381518110611311576113116127e3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b1561139f57611361838281518110611354576113546127e3565b60200260200101516109f9565b61139f5760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016107b4565b6113a8816127f9565b905061126d565b506000805160206129fc83398151915282516040516113d091815260200190565b60405180910390a1505190565b6000806113e86115a6565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114139190612479565b60206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146391906127ca565b9050600060a55460a454836114789190612695565b119050600060a5549050600060a75461148f610719565b1015806114995750825b156114ae5760a4546114ab9085612695565b91505b60a054156114c65760a0546114c39083612695565b90505b949350505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b600062015180609d544261150c919061267e565b6115169190612695565b9050609c54811115610c4757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610cdd565b61155f611cfa565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cdd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906126ee565b606780546001600160a01b0319166001600160a01b038316179055610c476108b4565b600061166a6114f8565b60a154609c54146118da57600061167f6115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116af9190612479565b60206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906127ca565b9050600060a55460a454836117149190612695565b11905060a754611722610719565b10158061172c5750805b156118445760a35460ff161561174457611744611eec565b6040516370a0823160e01b81526001600160a01b038416906370a0823190611770903090600401612479565b60206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906127ca565b915060a454826117d09190612695565b60a55560a45460a7556117e5610e1042612695565b6117f190610e106126b7565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a054156118905760a05460a55461188c9190612695565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b81806118ea5750805b15611978576001609a6000609c548152602001908152602001600020600101600082825461191891906126d6565b9091555050609c546000908152609a602090815260408083206001600160a01b03881684528252808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916119729084906126d6565b90915550505b8015611a625760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119af908890600401612479565b602060405180830381600087803b1580156119c957600080fd5b505af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0191906127ca565b905080609a6000609c5481526020019081526020016000206002016000828254611a2b91906126d6565b90915550506040518181526001600160a01b038616906000805160206129958339815191529060200160405180910390a2506108ae565b8115611abe57609c546000908152609a602052604081206002018054859290611a8c9084906126d6565b90915550506040518381526001600160a01b038516906000805160206129958339815191529060200160405180910390a25b6000611ac86115a6565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611af99088908890600401612814565b602060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b91906127ad565b611b8f5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016107b4565b5050505050565b6000805160206129b5833981519152546001600160a01b031690565b610c47611cfa565b6000611bc4611b96565b9050611bcf846121ef565b600083511180611bdc5750815b15611bed57611beb8484612282565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b8f57805460ff19166001178155604051611c68908690611c39908590602401612479565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612282565b50805460ff19168155611c79611b96565b6001600160a01b0316826001600160a01b031614611cf15760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b60648201526084016107b4565b611b8f8561236d565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7691906126ee565b6001600160a01b031614611dcc5760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016107b4565b565b600080611dd9611660565b9050611de48361120b565b8015611e0957506001600160a01b038316600090815260aa602052604090205460ff16155b8015611e1b5750611e19836110b8565b155b15611e3757611e2e8382600160006118e1565b50600192915050565b611e408361120b565b1580611e6457506001600160a01b038316600090815260aa602052604090205460ff165b15610d4157600160a06000828254611e7c91906126d6565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611eaf9084908060016118e1565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ef66115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f269190612479565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7691906127ca565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611fae9290911690600401612479565b60206040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe91906127ca565b6065546040519192506001600160a01b03169063d1b7089a9085906120299030908690602401612814565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526120849392916001600160a01b031690600090600401612885565b600060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120da91908101906128b9565b50600090506120e982846126d6565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612118903090600401612479565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906127ca565b81146121b05760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016107b4565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6122535760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107b4565b6000805160206129b583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107b4565b600080846001600160a01b0316846040516122fc9190612945565b600060405180830381855af49150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915061236482826040518060600160405280602781526020016129d5602791396123ad565b95945050505050565b612376816121ef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156123bc5750816123e6565b8251156123cc5782518084602001fd5b8160405162461bcd60e51b81526004016107b49190612961565b9392505050565b6001600160a01b0381168114610c4757600080fd5b60006020828403121561241457600080fd5b81356123e6816123ed565b60006020828403121561243157600080fd5b5035919050565b60008060006060848603121561244d57600080fd5b8335612458816123ed565b92506020840135612468816123ed565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156124cb576124cb61248d565b604052919050565b60006001600160401b038211156124ec576124ec61248d565b50601f01601f191660200190565b6000806040838503121561250d57600080fd5b8235612518816123ed565b915060208301356001600160401b0381111561253357600080fd5b8301601f8101851361254457600080fd5b8035612557612552826124d3565b6124a3565b81815286602083850101111561256c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561259f57600080fd5b82356001600160401b03808211156125b657600080fd5b818501915085601f8301126125ca57600080fd5b8135818111156125dc576125dc61248d565b8060051b91506125ed8483016124a3565b818152918301840191848101908884111561260757600080fd5b938501935b838510156126315784359250612621836123ed565b828252938501939085019061260c565b98975050505050505050565b8015158114610c4757600080fd5b60006020828403121561265d57600080fd5b81356123e68161263d565b634e487b7160e01b600052601160045260246000fd5b60008282101561269057612690612668565b500390565b6000826126b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126d1576126d1612668565b500290565b600082198211156126e9576126e9612668565b500190565b60006020828403121561270057600080fd5b81516123e6816123ed565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061297583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061297583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156127bf57600080fd5b81516123e68161263d565b6000602082840312156127dc57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561280d5761280d612668565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b83811015612848578181015183820152602001612830565b838111156108ae5750506000910152565b6000815180845261287181602086016020860161282d565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526128a76080840187612859565b94166040830152506060015292915050565b600080604083850312156128cc57600080fd5b82516128d78161263d565b60208401519092506001600160401b038111156128f357600080fd5b8301601f8101851361290457600080fd5b8051612912612552826124d3565b81815286602083850101111561292757600080fd5b61293882602083016020860161282d565b8093505050509250929050565b6000825161295781846020870161282d565b9190910192915050565b6020815260006123e6602083018461285956fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220e0358f3cae833f8bc5943145617b72291b79c603771ce20eca08c465e1e5a15064736f6c63430008080033",
859
+ "bytecode": "0x60a06040523060601b60805234801561001757600080fd5b5060805160601c612a5161004b60003960008181610b8c01528181610bcc0152818161100901526110490152612a516000f3fe6080604052600436106101d65760003560e01c8063013eba92146101db578063069786ea1461021b5780630ce82d67146102455780631248b1011461025a5780631794bb3c146102915780631b3c90a8146102b35780631bbc644c146102c85780631d8f5ea9146102f857806322b457271461030e5780633659cfe6146103245780633d84ceca146103445780633e6326fc146103645780634162169f146103915780634202d214146103b1578063456ac1c2146103d15780634e71d92d146103eb5780634f1ef286146104005780635231e2f014610413578063560796d1146104435780635aef7de6146104945780635c9302c9146104b457806373b2e80e146104ca578063741470ac146104ea5780638081cbbd1461050057806398d6621b146105205780639dc2c03314610535578063a21f698a1461054b578063b656223d1461056b578063ba07541014610581578063c033abf214610597578063c1337508146105ad578063c7713870146105cd578063c7a76adf146105e2578063cc054dfc14610602578063cef636001461062f578063d7c4cbb81461064f578063dddc361614610665578063de1de3a01461067a578063e1758bd81461069a578063eac471a0146106af578063eda4e6d6146106c5575b600080fd5b3480156101e757600080fd5b506102086101f6366004612402565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561022757600080fd5b506102306106db565b60408051928352602083019190915201610212565b34801561025157600080fd5b50610208610719565b34801561026657600080fd5b5061023061027536600461241f565b609a602052600090815260409020600181015460029091015482565b34801561029d57600080fd5b506102b16102ac366004612438565b61073c565b005b3480156102bf57600080fd5b506102b16108b4565b3480156102d457600080fd5b506102e86102e3366004612402565b6109f9565b6040519015158152602001610212565b34801561030457600080fd5b50610208609e5481565b34801561031a57600080fd5b5061020860a05481565b34801561033057600080fd5b506102b161033f366004612402565b610b81565b34801561035057600080fd5b506102b161035f36600461241f565b610c4a565b34801561037057600080fd5b50606754610384906001600160a01b031681565b6040516102129190612479565b34801561039d57600080fd5b50606554610384906001600160a01b031681565b3480156103bd57600080fd5b506102e86103cc366004612402565b610ce8565b3480156103dd57600080fd5b5060a3546102e89060ff1681565b3480156103f757600080fd5b506102e8610d4a565b6102b161040e3660046124fa565b610ffe565b34801561041f57600080fd5b506102e861042e366004612402565b60aa6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061047d61045e36600461241f565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610212565b3480156104a057600080fd5b50606654610384906001600160a01b031681565b3480156104c057600080fd5b50610208609c5481565b3480156104d657600080fd5b506102e86104e5366004612402565b6110b8565b3480156104f657600080fd5b5061020860a75481565b34801561050c57600080fd5b5060a854610384906001600160a01b031681565b34801561052c57600080fd5b506102086110e4565b34801561054157600080fd5b5061020860a55481565b34801561055757600080fd5b506102e8610566366004612402565b61120b565b34801561057757600080fd5b5061020860a25481565b34801561058d57600080fd5b5061020860a65481565b3480156105a357600080fd5b50610208609f5481565b3480156105b957600080fd5b506102086105c836600461258c565b611239565b3480156105d957600080fd5b506102086113dd565b3480156105ee57600080fd5b506102086105fd36600461241f565b6114ce565b34801561060e57600080fd5b5061020861061d366004612402565b60ab6020526000908152604090205481565b34801561063b57600080fd5b5061020861064a36600461241f565b6114e3565b34801561065b57600080fd5b5061020860a15481565b34801561067157600080fd5b506102b16114f8565b34801561068657600080fd5b506102b161069536600461264b565b611557565b3480156106a657600080fd5b506103846115a6565b3480156106bb57600080fd5b5061020860a45481565b3480156106d157600080fd5b50610208609d5481565b600080600062015180609d54426106f2919061267e565b6106fc9190612695565b9050610707816114ce565b610710826114e3565b92509250509091565b60006201518060a6544261072d919061267e565b6107379190612695565b905090565b600054610100900460ff1680610755575060005460ff16155b6107bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107df576000805461ffff19166101011790555b6000821161082f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016107b4565b6108388461163d565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561087b6201518042612695565b61088890620151806126b7565b6108949061a8c06126d6565b609d81905560a65580156108ae576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a91906126ee565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906126ee565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d54118015610a0e5750609d544210155b610a2a5760405162461bcd60e51b81526004016107b49061270b565b610a338261120b565b8015610a455750610a4382610ce8565b155b610a8b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b60448201526064016107b4565b6001600160a01b038216600090815260aa602052604090205460ff1615610ae55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b60448201526064016107b4565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610b10611660565b9050600160a06000828254610b25919061267e565b90915550610b38905033826000806118e1565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bca5760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bfc611b96565b6001600160a01b031614610c225760405162461bcd60e51b81526004016107b490612773565b610c2b81611bb2565b60408051600080825260208201909252610c4791839190611bba565b50565b610c52611cfa565b60008111610cac5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016107b4565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610d0a8361120b565b15610d4157600062015180610d1f834261267e565b610d299190612695565b905060a254811015610d3f575060019392505050565b505b50600092915050565b600080609d54118015610d5f5750609d544210155b610d7b5760405162461bcd60e51b81526004016107b49061270b565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f91906126ee565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e3a9190612479565b60206040518083038186803b158015610e5257600080fd5b505afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a91906127ad565b610ed35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016107b4565b6000610ede33611dce565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906126ee565b9050818015610f9457506001600160a01b03811615155b15610ff85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fc5903390600401612479565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110475760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611079611b96565b6001600160a01b03161461109f5760405162461bcd60e51b81526004016107b490612773565b6110a882611bb2565b6110b482826001611bba565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110f95750609d544210155b6111155760405162461bcd60e51b81526004016107b49061270b565b61111e3361120b565b1580611139575033600090815260aa602052604090205460ff165b156111c45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118c57600080fd5b505afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906127ca565b62015180609d54426111d6919061267e565b6111e09190612695565b609c541415611203576111f2336110b8565b6111fd5750609e5490565b50600090565b6107376113dd565b6001600160a01b0381166000908152609b60205260408120541561123157506001919050565b506000919050565b600080609d5411801561124e5750609d544210155b61126a5760405162461bcd60e51b81526004016107b49061270b565b60005b82518110156113af57609f545a10156112a7576040518181526000805160206129fc8339815191529060200160405180910390a192915050565b6112c98382815181106112bc576112bc6127e3565b602002602001015161120b565b80156112f457506112f28382815181106112e5576112e56127e3565b6020026020010151610ce8565b155b801561133a575060aa6000848381518110611311576113116127e3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b1561139f57611361838281518110611354576113546127e3565b60200260200101516109f9565b61139f5760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016107b4565b6113a8816127f9565b905061126d565b506000805160206129fc83398151915282516040516113d091815260200190565b60405180910390a1505190565b6000806113e86115a6565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114139190612479565b60206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146391906127ca565b9050600060a55460a454836114789190612695565b119050600060a5549050600060a75461148f610719565b1015806114995750825b156114ae5760a4546114ab9085612695565b91505b60a054156114c65760a0546114c39083612695565b90505b949350505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b600062015180609d544261150c919061267e565b6115169190612695565b9050609c54811115610c4757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610cdd565b61155f611cfa565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cdd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906126ee565b606780546001600160a01b0319166001600160a01b038316179055610c476108b4565b600061166a6114f8565b60a154609c54146118da57600061167f6115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116af9190612479565b60206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906127ca565b9050600060a55460a454836117149190612695565b11905060a754611722610719565b10158061172c5750805b156118445760a35460ff161561174457611744611eec565b6040516370a0823160e01b81526001600160a01b038416906370a0823190611770903090600401612479565b60206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906127ca565b915060a454826117d09190612695565b60a55560a45460a7556117e5610e1042612695565b6117f190610e106126b7565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a054156118905760a05460a55461188c9190612695565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b81806118ea5750805b15611978576001609a6000609c548152602001908152602001600020600101600082825461191891906126d6565b9091555050609c546000908152609a602090815260408083206001600160a01b03881684528252808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916119729084906126d6565b90915550505b8015611a625760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119af908890600401612479565b602060405180830381600087803b1580156119c957600080fd5b505af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0191906127ca565b905080609a6000609c5481526020019081526020016000206002016000828254611a2b91906126d6565b90915550506040518181526001600160a01b038616906000805160206129958339815191529060200160405180910390a2506108ae565b8115611abe57609c546000908152609a602052604081206002018054859290611a8c9084906126d6565b90915550506040518381526001600160a01b038516906000805160206129958339815191529060200160405180910390a25b6000611ac86115a6565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611af99088908890600401612814565b602060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b91906127ad565b611b8f5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016107b4565b5050505050565b6000805160206129b5833981519152546001600160a01b031690565b610c47611cfa565b6000611bc4611b96565b9050611bcf846121ef565b600083511180611bdc5750815b15611bed57611beb8484612282565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b8f57805460ff19166001178155604051611c68908690611c39908590602401612479565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612282565b50805460ff19168155611c79611b96565b6001600160a01b0316826001600160a01b031614611cf15760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b60648201526084016107b4565b611b8f8561236d565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7691906126ee565b6001600160a01b031614611dcc5760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016107b4565b565b600080611dd9611660565b9050611de48361120b565b8015611e0957506001600160a01b038316600090815260aa602052604090205460ff16155b8015611e1b5750611e19836110b8565b155b15611e3757611e2e8382600160006118e1565b50600192915050565b611e408361120b565b1580611e6457506001600160a01b038316600090815260aa602052604090205460ff165b15610d4157600160a06000828254611e7c91906126d6565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611eaf9084908060016118e1565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ef66115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f269190612479565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7691906127ca565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611fae9290911690600401612479565b60206040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe91906127ca565b6065546040519192506001600160a01b03169063d1b7089a9085906120299030908690602401612814565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526120849392916001600160a01b031690600090600401612885565b600060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120da91908101906128b9565b50600090506120e982846126d6565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612118903090600401612479565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906127ca565b81146121b05760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016107b4565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6122535760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107b4565b6000805160206129b583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107b4565b600080846001600160a01b0316846040516122fc9190612945565b600060405180830381855af49150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915061236482826040518060600160405280602781526020016129d5602791396123ad565b95945050505050565b612376816121ef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156123bc5750816123e6565b8251156123cc5782518084602001fd5b8160405162461bcd60e51b81526004016107b49190612961565b9392505050565b6001600160a01b0381168114610c4757600080fd5b60006020828403121561241457600080fd5b81356123e6816123ed565b60006020828403121561243157600080fd5b5035919050565b60008060006060848603121561244d57600080fd5b8335612458816123ed565b92506020840135612468816123ed565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156124cb576124cb61248d565b604052919050565b60006001600160401b038211156124ec576124ec61248d565b50601f01601f191660200190565b6000806040838503121561250d57600080fd5b8235612518816123ed565b915060208301356001600160401b0381111561253357600080fd5b8301601f8101851361254457600080fd5b8035612557612552826124d3565b6124a3565b81815286602083850101111561256c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561259f57600080fd5b82356001600160401b03808211156125b657600080fd5b818501915085601f8301126125ca57600080fd5b8135818111156125dc576125dc61248d565b8060051b91506125ed8483016124a3565b818152918301840191848101908884111561260757600080fd5b938501935b838510156126315784359250612621836123ed565b828252938501939085019061260c565b98975050505050505050565b8015158114610c4757600080fd5b60006020828403121561265d57600080fd5b81356123e68161263d565b634e487b7160e01b600052601160045260246000fd5b60008282101561269057612690612668565b500390565b6000826126b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126d1576126d1612668565b500290565b600082198211156126e9576126e9612668565b500190565b60006020828403121561270057600080fd5b81516123e6816123ed565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061297583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061297583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156127bf57600080fd5b81516123e68161263d565b6000602082840312156127dc57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561280d5761280d612668565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b83811015612848578181015183820152602001612830565b838111156108ae5750506000910152565b6000815180845261287181602086016020860161282d565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526128a76080840187612859565b94166040830152506060015292915050565b600080604083850312156128cc57600080fd5b82516128d78161263d565b60208401519092506001600160401b038111156128f357600080fd5b8301601f8101851361290457600080fd5b8051612912612552826124d3565b81815286602083850101111561292757600080fd5b61293882602083016020860161282d565b8093505050509250929050565b6000825161295781846020870161282d565b9190910192915050565b6020815260006123e6602083018461285956fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220f8620bb496a3ce4826fd9a66a6897765ae7c2458e9ee3ac2c3731a809486082164736f6c63430008080033",
860
+ "deployedBytecode": "0x6080604052600436106101d65760003560e01c8063013eba92146101db578063069786ea1461021b5780630ce82d67146102455780631248b1011461025a5780631794bb3c146102915780631b3c90a8146102b35780631bbc644c146102c85780631d8f5ea9146102f857806322b457271461030e5780633659cfe6146103245780633d84ceca146103445780633e6326fc146103645780634162169f146103915780634202d214146103b1578063456ac1c2146103d15780634e71d92d146103eb5780634f1ef286146104005780635231e2f014610413578063560796d1146104435780635aef7de6146104945780635c9302c9146104b457806373b2e80e146104ca578063741470ac146104ea5780638081cbbd1461050057806398d6621b146105205780639dc2c03314610535578063a21f698a1461054b578063b656223d1461056b578063ba07541014610581578063c033abf214610597578063c1337508146105ad578063c7713870146105cd578063c7a76adf146105e2578063cc054dfc14610602578063cef636001461062f578063d7c4cbb81461064f578063dddc361614610665578063de1de3a01461067a578063e1758bd81461069a578063eac471a0146106af578063eda4e6d6146106c5575b600080fd5b3480156101e757600080fd5b506102086101f6366004612402565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561022757600080fd5b506102306106db565b60408051928352602083019190915201610212565b34801561025157600080fd5b50610208610719565b34801561026657600080fd5b5061023061027536600461241f565b609a602052600090815260409020600181015460029091015482565b34801561029d57600080fd5b506102b16102ac366004612438565b61073c565b005b3480156102bf57600080fd5b506102b16108b4565b3480156102d457600080fd5b506102e86102e3366004612402565b6109f9565b6040519015158152602001610212565b34801561030457600080fd5b50610208609e5481565b34801561031a57600080fd5b5061020860a05481565b34801561033057600080fd5b506102b161033f366004612402565b610b81565b34801561035057600080fd5b506102b161035f36600461241f565b610c4a565b34801561037057600080fd5b50606754610384906001600160a01b031681565b6040516102129190612479565b34801561039d57600080fd5b50606554610384906001600160a01b031681565b3480156103bd57600080fd5b506102e86103cc366004612402565b610ce8565b3480156103dd57600080fd5b5060a3546102e89060ff1681565b3480156103f757600080fd5b506102e8610d4a565b6102b161040e3660046124fa565b610ffe565b34801561041f57600080fd5b506102e861042e366004612402565b60aa6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061047d61045e36600461241f565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610212565b3480156104a057600080fd5b50606654610384906001600160a01b031681565b3480156104c057600080fd5b50610208609c5481565b3480156104d657600080fd5b506102e86104e5366004612402565b6110b8565b3480156104f657600080fd5b5061020860a75481565b34801561050c57600080fd5b5060a854610384906001600160a01b031681565b34801561052c57600080fd5b506102086110e4565b34801561054157600080fd5b5061020860a55481565b34801561055757600080fd5b506102e8610566366004612402565b61120b565b34801561057757600080fd5b5061020860a25481565b34801561058d57600080fd5b5061020860a65481565b3480156105a357600080fd5b50610208609f5481565b3480156105b957600080fd5b506102086105c836600461258c565b611239565b3480156105d957600080fd5b506102086113dd565b3480156105ee57600080fd5b506102086105fd36600461241f565b6114ce565b34801561060e57600080fd5b5061020861061d366004612402565b60ab6020526000908152604090205481565b34801561063b57600080fd5b5061020861064a36600461241f565b6114e3565b34801561065b57600080fd5b5061020860a15481565b34801561067157600080fd5b506102b16114f8565b34801561068657600080fd5b506102b161069536600461264b565b611557565b3480156106a657600080fd5b506103846115a6565b3480156106bb57600080fd5b5061020860a45481565b3480156106d157600080fd5b50610208609d5481565b600080600062015180609d54426106f2919061267e565b6106fc9190612695565b9050610707816114ce565b610710826114e3565b92509250509091565b60006201518060a6544261072d919061267e565b6107379190612695565b905090565b600054610100900460ff1680610755575060005460ff16155b6107bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107df576000805461ffff19166101011790555b6000821161082f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016107b4565b6108388461163d565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561087b6201518042612695565b61088890620151806126b7565b6108949061a8c06126d6565b609d81905560a65580156108ae576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a91906126ee565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906126ee565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d54118015610a0e5750609d544210155b610a2a5760405162461bcd60e51b81526004016107b49061270b565b610a338261120b565b8015610a455750610a4382610ce8565b155b610a8b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b60448201526064016107b4565b6001600160a01b038216600090815260aa602052604090205460ff1615610ae55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b60448201526064016107b4565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610b10611660565b9050600160a06000828254610b25919061267e565b90915550610b38905033826000806118e1565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bca5760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bfc611b96565b6001600160a01b031614610c225760405162461bcd60e51b81526004016107b490612773565b610c2b81611bb2565b60408051600080825260208201909252610c4791839190611bba565b50565b610c52611cfa565b60008111610cac5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016107b4565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610d0a8361120b565b15610d4157600062015180610d1f834261267e565b610d299190612695565b905060a254811015610d3f575060019392505050565b505b50600092915050565b600080609d54118015610d5f5750609d544210155b610d7b5760405162461bcd60e51b81526004016107b49061270b565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f91906126ee565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e3a9190612479565b60206040518083038186803b158015610e5257600080fd5b505afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a91906127ad565b610ed35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016107b4565b6000610ede33611dce565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906126ee565b9050818015610f9457506001600160a01b03811615155b15610ff85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fc5903390600401612479565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110475760405162461bcd60e51b81526004016107b490612739565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611079611b96565b6001600160a01b03161461109f5760405162461bcd60e51b81526004016107b490612773565b6110a882611bb2565b6110b482826001611bba565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110f95750609d544210155b6111155760405162461bcd60e51b81526004016107b49061270b565b61111e3361120b565b1580611139575033600090815260aa602052604090205460ff165b156111c45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118c57600080fd5b505afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906127ca565b62015180609d54426111d6919061267e565b6111e09190612695565b609c541415611203576111f2336110b8565b6111fd5750609e5490565b50600090565b6107376113dd565b6001600160a01b0381166000908152609b60205260408120541561123157506001919050565b506000919050565b600080609d5411801561124e5750609d544210155b61126a5760405162461bcd60e51b81526004016107b49061270b565b60005b82518110156113af57609f545a10156112a7576040518181526000805160206129fc8339815191529060200160405180910390a192915050565b6112c98382815181106112bc576112bc6127e3565b602002602001015161120b565b80156112f457506112f28382815181106112e5576112e56127e3565b6020026020010151610ce8565b155b801561133a575060aa6000848381518110611311576113116127e3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b1561139f57611361838281518110611354576113546127e3565b60200260200101516109f9565b61139f5760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016107b4565b6113a8816127f9565b905061126d565b506000805160206129fc83398151915282516040516113d091815260200190565b60405180910390a1505190565b6000806113e86115a6565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114139190612479565b60206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146391906127ca565b9050600060a55460a454836114789190612695565b119050600060a5549050600060a75461148f610719565b1015806114995750825b156114ae5760a4546114ab9085612695565b91505b60a054156114c65760a0546114c39083612695565b90505b949350505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b600062015180609d544261150c919061267e565b6115169190612695565b9050609c54811115610c4757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610cdd565b61155f611cfa565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cdd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073791906126ee565b606780546001600160a01b0319166001600160a01b038316179055610c476108b4565b600061166a6114f8565b60a154609c54146118da57600061167f6115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116af9190612479565b60206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906127ca565b9050600060a55460a454836117149190612695565b11905060a754611722610719565b10158061172c5750805b156118445760a35460ff161561174457611744611eec565b6040516370a0823160e01b81526001600160a01b038416906370a0823190611770903090600401612479565b60206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906127ca565b915060a454826117d09190612695565b60a55560a45460a7556117e5610e1042612695565b6117f190610e106126b7565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a054156118905760a05460a55461188c9190612695565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b81806118ea5750805b15611978576001609a6000609c548152602001908152602001600020600101600082825461191891906126d6565b9091555050609c546000908152609a602090815260408083206001600160a01b03881684528252808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916119729084906126d6565b90915550505b8015611a625760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119af908890600401612479565b602060405180830381600087803b1580156119c957600080fd5b505af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0191906127ca565b905080609a6000609c5481526020019081526020016000206002016000828254611a2b91906126d6565b90915550506040518181526001600160a01b038616906000805160206129958339815191529060200160405180910390a2506108ae565b8115611abe57609c546000908152609a602052604081206002018054859290611a8c9084906126d6565b90915550506040518381526001600160a01b038516906000805160206129958339815191529060200160405180910390a25b6000611ac86115a6565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611af99088908890600401612814565b602060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b91906127ad565b611b8f5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016107b4565b5050505050565b6000805160206129b5833981519152546001600160a01b031690565b610c47611cfa565b6000611bc4611b96565b9050611bcf846121ef565b600083511180611bdc5750815b15611bed57611beb8484612282565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b8f57805460ff19166001178155604051611c68908690611c39908590602401612479565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612282565b50805460ff19168155611c79611b96565b6001600160a01b0316826001600160a01b031614611cf15760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b60648201526084016107b4565b611b8f8561236d565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611d3e57600080fd5b505afa158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7691906126ee565b6001600160a01b031614611dcc5760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016107b4565b565b600080611dd9611660565b9050611de48361120b565b8015611e0957506001600160a01b038316600090815260aa602052604090205460ff16155b8015611e1b5750611e19836110b8565b155b15611e3757611e2e8382600160006118e1565b50600192915050565b611e408361120b565b1580611e6457506001600160a01b038316600090815260aa602052604090205460ff165b15610d4157600160a06000828254611e7c91906126d6565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611eaf9084908060016118e1565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ef66115a6565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f269190612479565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7691906127ca565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611fae9290911690600401612479565b60206040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe91906127ca565b6065546040519192506001600160a01b03169063d1b7089a9085906120299030908690602401612814565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526120849392916001600160a01b031690600090600401612885565b600060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120da91908101906128b9565b50600090506120e982846126d6565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612118903090600401612479565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906127ca565b81146121b05760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016107b4565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6122535760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107b4565b6000805160206129b583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107b4565b600080846001600160a01b0316846040516122fc9190612945565b600060405180830381855af49150503d8060008114612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b509150915061236482826040518060600160405280602781526020016129d5602791396123ad565b95945050505050565b612376816121ef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156123bc5750816123e6565b8251156123cc5782518084602001fd5b8160405162461bcd60e51b81526004016107b49190612961565b9392505050565b6001600160a01b0381168114610c4757600080fd5b60006020828403121561241457600080fd5b81356123e6816123ed565b60006020828403121561243157600080fd5b5035919050565b60008060006060848603121561244d57600080fd5b8335612458816123ed565b92506020840135612468816123ed565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156124cb576124cb61248d565b604052919050565b60006001600160401b038211156124ec576124ec61248d565b50601f01601f191660200190565b6000806040838503121561250d57600080fd5b8235612518816123ed565b915060208301356001600160401b0381111561253357600080fd5b8301601f8101851361254457600080fd5b8035612557612552826124d3565b6124a3565b81815286602083850101111561256c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561259f57600080fd5b82356001600160401b03808211156125b657600080fd5b818501915085601f8301126125ca57600080fd5b8135818111156125dc576125dc61248d565b8060051b91506125ed8483016124a3565b818152918301840191848101908884111561260757600080fd5b938501935b838510156126315784359250612621836123ed565b828252938501939085019061260c565b98975050505050505050565b8015158114610c4757600080fd5b60006020828403121561265d57600080fd5b81356123e68161263d565b634e487b7160e01b600052601160045260246000fd5b60008282101561269057612690612668565b500390565b6000826126b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126d1576126d1612668565b500290565b600082198211156126e9576126e9612668565b500190565b60006020828403121561270057600080fd5b81516123e6816123ed565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061297583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061297583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156127bf57600080fd5b81516123e68161263d565b6000602082840312156127dc57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561280d5761280d612668565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b83811015612848578181015183820152602001612830565b838111156108ae5750506000910152565b6000815180845261287181602086016020860161282d565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526128a76080840187612859565b94166040830152506060015292915050565b600080604083850312156128cc57600080fd5b82516128d78161263d565b60208401519092506001600160401b038111156128f357600080fd5b8301601f8101851361290457600080fd5b8051612912612552826124d3565b81815286602083850101111561292757600080fd5b61293882602083016020860161282d565b8093505050509250929050565b6000825161295781846020870161282d565b9190910192915050565b6020815260006123e6602083018461285956fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220f8620bb496a3ce4826fd9a66a6897765ae7c2458e9ee3ac2c3731a809486082164736f6c63430008080033",
861
861
  "linkReferences": {},
862
862
  "deployedLinkReferences": {}
863
863
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/0e59b6917bea9eae3671c456a781b963.json"
3
+ "buildInfo": "../../../build-info/82d74f20f1a2ee68fd4fbdf578e2beb6.json"
4
4
  }
@@ -74,8 +74,8 @@
74
74
  "type": "function"
75
75
  }
76
76
  ],
77
- "bytecode": "0x608060405234801561001057600080fd5b5060405161035c38038061035c83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6102c9806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220a6036a8bf25bfb165981fd3de135b04ab54418302283a6ddcbf9d0d232fc436064736f6c63430008080033",
78
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220a6036a8bf25bfb165981fd3de135b04ab54418302283a6ddcbf9d0d232fc436064736f6c63430008080033",
77
+ "bytecode": "0x608060405234801561001057600080fd5b5060405161035c38038061035c83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6102c9806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea264697066735822122065a8d8c1fef04347305f46fc314defa3b9c351deb21a6dc1870b45f382acb92564736f6c63430008080033",
78
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea264697066735822122065a8d8c1fef04347305f46fc314defa3b9c351deb21a6dc1870b45f382acb92564736f6c63430008080033",
79
79
  "linkReferences": {},
80
80
  "deployedLinkReferences": {}
81
81
  }
@@ -115,7 +115,7 @@ contract GReputation is Reputation {
115
115
  delegates[repTarget] = repTarget;
116
116
  delegator = repTarget;
117
117
  }
118
- uint256 previousVotes = getVotes(delegator);
118
+ uint256 previousVotes = getVotesAt(delegator, false, block.number);
119
119
 
120
120
  _updateDelegateVotes(
121
121
  delegator,
@@ -139,7 +139,8 @@ contract GReputation is Reputation {
139
139
  address delegator = delegates[_user];
140
140
  delegator = delegator != address(0) ? delegator : _user;
141
141
  delegates[_user] = delegator;
142
- uint256 previousVotes = getVotes(delegator);
142
+
143
+ uint256 previousVotes = getVotesAt(delegator, false, block.number);
143
144
 
144
145
  _updateDelegateVotes(
145
146
  delegator,
@@ -178,7 +179,7 @@ contract GReputation is Reputation {
178
179
  //dont consider rootState as blockchain, it is a special state hash
179
180
  bool isRootState = idHash == ROOT_STATE;
180
181
  require(
181
- !isRootState || super.totalSupplyAt(block.number) == 0,
182
+ !isRootState || totalSupplyLocalAt(block.number) == 0,
182
183
  "rootState already created"
183
184
  );
184
185
  uint256 i = 0;
@@ -235,7 +236,14 @@ contract GReputation is Reputation {
235
236
  }
236
237
 
237
238
  /**
238
- be compatible with compound
239
+ * @notice same as getVotes, be compatible with metamask
240
+ */
241
+ function balanceOf(address _user) public view returns (uint256 balance) {
242
+ return getVotesAt(_user, block.number);
243
+ }
244
+
245
+ /**
246
+ same as getVotes be compatible with compound
239
247
  */
240
248
  function getCurrentVotes(address _user) public view returns (uint256) {
241
249
  return getVotesAt(_user, true, block.number);
@@ -264,7 +272,7 @@ contract GReputation is Reputation {
264
272
  }
265
273
 
266
274
  /**
267
- * @notice returns total supply in current blockchain (super.balanceOfAt)
275
+ * @notice returns total supply in current blockchain
268
276
  * @param _blockNumber get total supply at specific block
269
277
  * @return the totaly supply
270
278
  */
@@ -273,7 +281,7 @@ contract GReputation is Reputation {
273
281
  view
274
282
  returns (uint256)
275
283
  {
276
- return super.totalSupplyAt(_blockNumber);
284
+ return totalSupplyLocalAt(_blockNumber);
277
285
  }
278
286
 
279
287
  /**
@@ -281,13 +289,8 @@ contract GReputation is Reputation {
281
289
  * @param _blockNumber get total supply at specific block
282
290
  * @return the totaly supply
283
291
  */
284
- function totalSupplyAt(uint256 _blockNumber)
285
- public
286
- view
287
- override
288
- returns (uint256)
289
- {
290
- uint256 startingSupply = super.totalSupplyAt(_blockNumber);
292
+ function totalSupplyAt(uint256 _blockNumber) public view returns (uint256) {
293
+ uint256 startingSupply = totalSupplyLocalAt(_blockNumber);
291
294
  for (uint256 i = 0; i < activeBlockchains.length; i++) {
292
295
  startingSupply += totalSupplyAtBlockchain(
293
296
  activeBlockchains[i],
@@ -297,6 +300,12 @@ contract GReputation is Reputation {
297
300
  return startingSupply;
298
301
  }
299
302
 
303
+ /// @dev This function makes it easy to get the total number of reputation
304
+ /// @return The total number of reputation
305
+ function totalSupply() public view returns (uint256) {
306
+ return totalSupplyAt(block.number);
307
+ }
308
+
300
309
  /// @notice get the number of active votes a user holds after delegation in specific blockchain
301
310
  /// @param _id the keccak hash of the blockchain string id
302
311
  /// @param _user the user to get active votes for
@@ -480,7 +489,7 @@ contract GReputation is Reputation {
480
489
  delegates[_user] = _delegate;
481
490
 
482
491
  // remove votes from current delegator
483
- uint256 coreBalance = balanceOf(_user);
492
+ uint256 coreBalance = balanceOfLocalAt(_user, block.number);
484
493
  //redundant check - should not be possible to have address 0 as delegator
485
494
  if (curDelegator != address(0)) {
486
495
  uint256 removeVotes = getVotesAt(curDelegator, false, block.number);
@@ -567,4 +576,34 @@ contract GReputation is Reputation {
567
576
  function setReputationRecipient(address _target) public {
568
577
  reputationRecipients[msg.sender] = _target;
569
578
  }
579
+
580
+ function fix1() public {
581
+ if (
582
+ getVotes(0x7f8c1877Ed0DA352F78be4Fe4CdA58BB804a30dF) ==
583
+ 1008145362854518632309 &&
584
+ getVotes(0xDEb250aDD368b74ebCCd59862D62fa4Fb57E09D4) ==
585
+ 587905678906424942728383 &&
586
+ getVotes(0x1D5096665E79585019c448259D944090F28702E3) ==
587
+ 3421532080040613840050
588
+ ) {
589
+ _updateDelegateVotes(
590
+ 0x7f8c1877Ed0DA352F78be4Fe4CdA58BB804a30dF,
591
+ 0x7f8c1877Ed0DA352F78be4Fe4CdA58BB804a30dF,
592
+ 1008145362854518632309,
593
+ balanceOfLocal(0x7f8c1877Ed0DA352F78be4Fe4CdA58BB804a30dF)
594
+ );
595
+ _updateDelegateVotes(
596
+ 0xDEb250aDD368b74ebCCd59862D62fa4Fb57E09D4,
597
+ 0xDEb250aDD368b74ebCCd59862D62fa4Fb57E09D4,
598
+ 587905678906424942728383,
599
+ balanceOfLocal(0xDEb250aDD368b74ebCCd59862D62fa4Fb57E09D4)
600
+ );
601
+ _updateDelegateVotes(
602
+ 0x1D5096665E79585019c448259D944090F28702E3,
603
+ 0x1D5096665E79585019c448259D944090F28702E3,
604
+ 3421532080040613840050,
605
+ balanceOfLocal(0x1D5096665E79585019c448259D944090F28702E3)
606
+ );
607
+ }
608
+ }
570
609
  }
@@ -63,10 +63,7 @@ contract Reputation is DAOUpgradeableContract, AccessControlUpgradeable {
63
63
  }
64
64
 
65
65
  function _canMint() internal view virtual {
66
- require(
67
- hasRole(MINTER_ROLE, _msgSender()),
68
- "Reputation: need minter role"
69
- );
66
+ require(hasRole(MINTER_ROLE, _msgSender()), "Reputation: need minter role");
70
67
  }
71
68
 
72
69
  /// @notice Generates `_amount` reputation that are assigned to `_owner`
@@ -84,8 +81,8 @@ contract Reputation is DAOUpgradeableContract, AccessControlUpgradeable {
84
81
  virtual
85
82
  returns (uint256)
86
83
  {
87
- uint256 curTotalSupply = totalSupply();
88
- uint256 previousBalanceTo = balanceOf(_user);
84
+ uint256 curTotalSupply = totalSupplyLocalAt(block.number);
85
+ uint256 previousBalanceTo = balanceOfLocalAt(_user, block.number);
89
86
 
90
87
  updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
91
88
  updateValueAtNow(balances[_user], previousBalanceTo + _amount);
@@ -109,9 +106,9 @@ contract Reputation is DAOUpgradeableContract, AccessControlUpgradeable {
109
106
  virtual
110
107
  returns (uint256)
111
108
  {
112
- uint256 curTotalSupply = totalSupply();
109
+ uint256 curTotalSupply = totalSupplyLocalAt(block.number);
113
110
  uint256 amountBurned = _amount;
114
- uint256 previousBalanceFrom = balanceOf(_user);
111
+ uint256 previousBalanceFrom = balanceOfLocalAt(_user, block.number);
115
112
  if (previousBalanceFrom < amountBurned) {
116
113
  amountBurned = previousBalanceFrom;
117
114
  }
@@ -121,28 +118,15 @@ contract Reputation is DAOUpgradeableContract, AccessControlUpgradeable {
121
118
  return amountBurned;
122
119
  }
123
120
 
124
- /// @dev This function makes it easy to get the total number of reputation
125
- /// @return The total number of reputation
126
- function totalSupply() public view returns (uint256) {
127
- return totalSupplyAt(block.number);
128
- }
129
-
130
- ////////////////
131
- // Query balance and totalSupply in History
132
- ////////////////
133
- /**
134
- * @dev return the reputation amount of a given owner
135
- * @param _owner an address of the owner which we want to get his reputation
136
- */
137
- function balanceOf(address _owner) public view returns (uint256 balance) {
138
- return balanceOfAt(_owner, block.number);
121
+ function balanceOfLocal(address _owner) public view returns (uint256) {
122
+ return balanceOfLocalAt(_owner, block.number);
139
123
  }
140
124
 
141
125
  /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
142
126
  /// @param _owner The address from which the balance will be retrieved
143
127
  /// @param _blockNumber The block number when the balance is queried
144
128
  /// @return The balance at `_blockNumber`
145
- function balanceOfAt(address _owner, uint256 _blockNumber)
129
+ function balanceOfLocalAt(address _owner, uint256 _blockNumber)
146
130
  public
147
131
  view
148
132
  virtual
@@ -159,10 +143,14 @@ contract Reputation is DAOUpgradeableContract, AccessControlUpgradeable {
159
143
  }
160
144
  }
161
145
 
146
+ function totalSupplyLocal() public view virtual returns (uint256) {
147
+ return totalSupplyLocalAt(block.number);
148
+ }
149
+
162
150
  /// @notice Total amount of reputation at a specific `_blockNumber`.
163
151
  /// @param _blockNumber The block number when the totalSupply is queried
164
152
  /// @return The total amount of reputation at `_blockNumber`
165
- function totalSupplyAt(uint256 _blockNumber)
153
+ function totalSupplyLocalAt(uint256 _blockNumber)
166
154
  public
167
155
  view
168
156
  virtual
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "build": "scripts/build.sh deploy",