@keep-network/tbtc-v2 1.6.0-dev.8 → 1.6.0-dev.9

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 (106) hide show
  1. package/artifacts/BLS.json +1 -1
  2. package/artifacts/Bank.json +3 -3
  3. package/artifacts/BeaconAuthorization.json +1 -1
  4. package/artifacts/BeaconDkg.json +1 -1
  5. package/artifacts/BeaconDkgValidator.json +1 -1
  6. package/artifacts/BeaconInactivity.json +1 -1
  7. package/artifacts/BeaconSortitionPool.json +3 -3
  8. package/artifacts/Bridge.json +5 -5
  9. package/artifacts/BridgeGovernance.json +2 -2
  10. package/artifacts/BridgeGovernanceParameters.json +2 -2
  11. package/artifacts/Deposit.json +2 -2
  12. package/artifacts/DepositSweep.json +2 -2
  13. package/artifacts/DonationVault.json +3 -3
  14. package/artifacts/EcdsaDkgValidator.json +1 -1
  15. package/artifacts/EcdsaInactivity.json +1 -1
  16. package/artifacts/EcdsaSortitionPool.json +3 -3
  17. package/artifacts/Fraud.json +2 -2
  18. package/artifacts/LightRelay.json +18 -18
  19. package/artifacts/LightRelayMaintainerProxy.json +8 -8
  20. package/artifacts/MaintainerProxy.json +19 -19
  21. package/artifacts/MovingFunds.json +2 -2
  22. package/artifacts/NuCypherToken.json +2 -2
  23. package/artifacts/RandomBeacon.json +2 -2
  24. package/artifacts/RandomBeaconChaosnet.json +2 -2
  25. package/artifacts/RandomBeaconGovernance.json +2 -2
  26. package/artifacts/Redemption.json +2 -2
  27. package/artifacts/ReimbursementPool.json +2 -2
  28. package/artifacts/T.json +2 -2
  29. package/artifacts/TBTC.json +3 -3
  30. package/artifacts/TBTCToken.json +3 -3
  31. package/artifacts/TBTCVault.json +23 -23
  32. package/artifacts/TokenStaking.json +1 -1
  33. package/artifacts/TokenholderGovernor.json +9 -9
  34. package/artifacts/TokenholderTimelock.json +8 -8
  35. package/artifacts/VendingMachine.json +3 -3
  36. package/artifacts/VendingMachineNuCypher.json +1 -1
  37. package/artifacts/VendingMachineV2.json +3 -3
  38. package/artifacts/VendingMachineV3.json +3 -3
  39. package/artifacts/WalletProposalValidator.json +62 -9
  40. package/artifacts/WalletRegistry.json +5 -5
  41. package/artifacts/WalletRegistryGovernance.json +2 -2
  42. package/artifacts/Wallets.json +2 -2
  43. package/artifacts/solcInputs/{e2337fbc33ddf79d3229147ce15c40b6.json → 3090118554664301f434ca00232869b0.json} +1 -1
  44. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  45. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  46. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  47. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  48. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  49. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  50. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  51. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  52. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  53. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  54. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  55. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  56. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  57. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  58. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  59. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  60. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  61. package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
  62. package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
  63. package/build/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.dbg.json +1 -1
  64. package/build/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.json +43 -2
  65. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  66. package/build/contracts/l2/L2TBTC.sol/L2TBTC.dbg.json +1 -1
  67. package/build/contracts/l2/L2WormholeGateway.sol/IWormholeTokenBridge.dbg.json +1 -1
  68. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
  69. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  70. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  71. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  72. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  73. package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
  74. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  75. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  76. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  77. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  78. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  79. package/contracts/bridge/WalletProposalValidator.sol +89 -0
  80. package/export/artifacts/contracts/bridge/Bridge.sol/Bridge.json +22 -22
  81. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +6 -6
  82. package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +6 -6
  83. package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +6 -6
  84. package/export/artifacts/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.json +6643 -4798
  85. package/export/artifacts/contracts/l2/L2TBTC.sol/L2TBTC.json +40 -40
  86. package/export/artifacts/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +47 -47
  87. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +88 -88
  88. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +57 -57
  89. package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +31 -31
  90. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +2 -2
  91. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +58 -58
  92. package/export/artifacts/contracts/test/GoerliLightRelay.sol/GoerliLightRelay.json +59 -59
  93. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +2 -2
  94. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +59 -59
  95. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +7 -7
  96. package/export/artifacts/contracts/test/SepoliaLightRelay.sol/SepoliaLightRelay.json +59 -59
  97. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +14 -14
  98. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +6 -6
  99. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +8 -8
  100. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +2 -2
  101. package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +37 -37
  102. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
  103. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
  104. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +135 -135
  105. package/export/typechain/factories/WalletProposalValidator__factory.js +42 -1
  106. package/package.json +1 -1
@@ -243,6 +243,47 @@
243
243
  "stateMutability": "view",
244
244
  "type": "function"
245
245
  },
246
+ {
247
+ "inputs": [
248
+ {
249
+ "components": [
250
+ {
251
+ "internalType": "bytes20",
252
+ "name": "walletPubKeyHash",
253
+ "type": "bytes20"
254
+ },
255
+ {
256
+ "internalType": "bytes32",
257
+ "name": "movingFundsTxHash",
258
+ "type": "bytes32"
259
+ },
260
+ {
261
+ "internalType": "uint32",
262
+ "name": "movingFundsTxOutputIndex",
263
+ "type": "uint32"
264
+ },
265
+ {
266
+ "internalType": "uint256",
267
+ "name": "movedFundsSweepTxFee",
268
+ "type": "uint256"
269
+ }
270
+ ],
271
+ "internalType": "struct WalletProposalValidator.MovedFundsSweepProposal",
272
+ "name": "proposal",
273
+ "type": "tuple"
274
+ }
275
+ ],
276
+ "name": "validateMovedFundsSweepProposal",
277
+ "outputs": [
278
+ {
279
+ "internalType": "bool",
280
+ "name": "",
281
+ "type": "bool"
282
+ }
283
+ ],
284
+ "stateMutability": "view",
285
+ "type": "function"
286
+ },
246
287
  {
247
288
  "inputs": [
248
289
  {
@@ -338,8 +379,8 @@
338
379
  "type": "function"
339
380
  }
340
381
  ],
341
- "bytecode": "0x60a06040523480156200001157600080fd5b506040516200342038038062003420833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051613354620000cc6000396000818161016d015281816101c80152818161038501528181610652015281816109c401528181610d74015281816111b001528181611408015261172b01526133546000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063996a756b11610081578063e0276b261161005b578063e0276b2614610131578063e78cea9214610168578063f03a4bc5146101a757600080fd5b8063996a756b146101315780639b337db21461014c578063d09520f71461015f57600080fd5b80636b562cec116100b25780636b562cec146100ce5780637405d7bf14610114578063765f28f91461012757600080fd5b80630538ac1b146100ce5780630fde6c76146100f1575b600080fd5b6100d7611c2081565b60405163ffffffff90911681526020015b60405180910390f35b6101046100ff3660046124e4565b6101ba565b60405190151581526020016100e8565b610104610122366004612521565b6109b6565b6100d76201518081565b610139601481565b60405161ffff90911681526020016100e8565b61010461015a3660046125c3565b6111a3565b6100d761025881565b61018f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e8565b6101046101b5366004612612565b611635565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56101fa6020860186612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa158015610245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102699190612776565b60e00151600581111561027e5761027e61264d565b146102d05760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064015b60405180910390fd5b60006102df6020840184612819565b9150508061032f5760405162461bcd60e51b815260206004820152601d60248201527f526564656d7074696f6e2062656c6f7720746865206d696e2073697a6500000060448201526064016102c7565b60148111156103805760405162461bcd60e51b815260206004820152601f60248201527f526564656d7074696f6e206578636565647320746865206d61782073697a650060448201526064016102c7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e70ce416040518163ffffffff1660e01b815260040160e060405180830381865afa1580156103e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610405919061287f565b50509450945050505060008560400135116104725760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b8167ffffffffffffffff16856040013511156104dc5760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b60006104ec84604088013561292d565b90506000846104ff8360408a0135612957565b610509919061296a565b905060008567ffffffffffffffff811115610526576105266126a0565b60405190808252806020026020018201604052801561054f578160200160208202803683370190505b50905060005b868110156109a757600061056c60208b018b612819565b8381811061057c5761057c61297e565b905060200281019061058e9190612994565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120959650909493506105df92508e0190508d612685565b6040516020016106089291909182526bffffffffffffffffffffffff1916602082015260340190565b60408051808303601f190181529082905280516020909101207f03d952f70000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906303d952f79060240160a060405180830381865afa1580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c591906129f2565b9050806080015163ffffffff166000036107215760405162461bcd60e51b815260206004820181905260248201527f4e6f7420612070656e64696e6720726564656d7074696f6e207265717565737460448201526064016102c7565b61025881608001516107339190612a88565b63ffffffff1642116107ad5760405162461bcd60e51b815260206004820152602b60248201527f526564656d7074696f6e2072657175657374206d696e20616765206e6f74206160448201527f636869657665642079657400000000000000000000000000000000000000000060648201526084016102c7565b60008882608001516107bf9190612a88565b90506107cd611c2082612aac565b63ffffffff1642106108475760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e20726571756573742074696d656f757420736166657460448201527f79206d617267696e206973206e6f74207072657365727665640000000000000060648201526084016102c7565b8661085360018d612957565b8603610866576108638982612ac9565b90505b826060015167ffffffffffffffff168111156108ea5760405162461bcd60e51b815260206004820152603660248201527f50726f706f736564207472616e73616374696f6e207065722d7265717565737460448201527f2066656520736861726520697320746f6f20686967680000000000000000000060648201526084016102c7565b60005b8681101561096f57848882815181106109085761090861297e565b60200260200101510361095d5760405162461bcd60e51b815260206004820152601260248201527f4475706c6963617465642072657175657374000000000000000000000000000060448201526064016102c7565b8061096781612adc565b9150506108ed565b50838787815181106109835761098361297e565b6020026020010181815250505050505050808061099f90612adc565b915050610555565b50600198975050505050505050565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56109f66020880188612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190612776565b60e001516005811115610a7a57610a7a61264d565b14610ac75760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064016102c7565b6000610ad66020860186612af5565b905011610b255760405162461bcd60e51b815260206004820152601860248201527f53776565702062656c6f7720746865206d696e2073697a65000000000000000060448201526064016102c7565b6014610b346020860186612af5565b90501115610b845760405162461bcd60e51b815260206004820152601a60248201527f5377656570206578636565647320746865206d61782073697a6500000000000060448201526064016102c7565b81610b926020860186612af5565b905014610c075760405162461bcd60e51b815260206004820152602e60248201527f45616368206465706f736974206b6579206d7573742068617665206d6174636860448201527f696e67206578747261206461746100000000000000000000000000000000000060648201526084016102c7565b610c236040850135610c1c6020870187612af5565b90506116a0565b600080610c336020870187612af5565b905067ffffffffffffffff811115610c4d57610c4d6126a0565b604051908082528060200260200182016040528015610c76578160200160208202803683370190505b50905060005b610c896020880188612af5565b9050811015611194576000610ca16020890189612af5565b83818110610cb157610cb161297e565b905060400201803603810190610cc79190612b3f565b90506000878784818110610cdd57610cdd61297e565b9050602002810190610cef9190612b95565b610cf890612c72565b8251602080850151604051939450600093610d2a93920191825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207fb02c43d00000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160c060405180830381865afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190612d74565b9050806040015163ffffffff16600003610e435760405162461bcd60e51b815260206004820152601460248201527f4465706f736974206e6f742072657665616c656400000000000000000000000060448201526064016102c7565b611c208160400151610e559190612a88565b63ffffffff164211610ea95760405162461bcd60e51b815260206004820181905260248201527f4465706f736974206d696e20616765206e6f742061636869657665642079657460448201526064016102c7565b60a081015163ffffffff1615610f015760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016102c7565b610f1084826000015185611827565b608083015160e881901c62ff00ff1663ff00ff0060d89290921c9190911617601081811c91901b17610f456201518082612aac565b63ffffffff164210610fbf5760405162461bcd60e51b815260206004820152602d60248201527f4465706f73697420726566756e6420736166657479206d617267696e2069732060448201527f6e6f74207072657365727665640000000000000000000000000000000000000060648201526084016102c7565b610fcc60208d018d612685565b6bffffffffffffffffffffffff191684604001516bffffffffffffffffffffffff1916146110625760405162461bcd60e51b815260206004820152602660248201527f4465706f73697420636f6e74726f6c6c656420627920646966666572656e742060448201527f77616c6c6574000000000000000000000000000000000000000000000000000060648201526084016102c7565b8560000361107257816060015197505b876001600160a01b031682606001516001600160a01b0316146110d75760405162461bcd60e51b815260206004820152601f60248201527f4465706f736974207461726765747320646966666572656e74207661756c740060448201526064016102c7565b60005b8681101561115c57838882815181106110f5576110f561297e565b60200260200101510361114a5760405162461bcd60e51b815260206004820152601260248201527f4475706c696361746564206465706f736974000000000000000000000000000060448201526064016102c7565b8061115481612adc565b9150506110da565b50828787815181106111705761117061297e565b6020026020010181815250505050505050808061118c90612adc565b915050610c7c565b506001925050505b9392505050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56111e26020870187612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190612776565b905060028160e00151600581111561126b5761126b61264d565b146112de5760405162461bcd60e51b815260206004820152602960248201527f536f757263652077616c6c6574206973206e6f7420696e204d6f76696e67467560448201527f6e6473207374617465000000000000000000000000000000000000000000000060648201526084016102c7565b6101008101516113565760405162461bcd60e51b815260206004820152602a60248201527f5461726765742077616c6c65747320636f6d6d69746d656e74206973206e6f7460448201527f207375626d69747465640000000000000000000000000000000000000000000060648201526084016102c7565b6113636020850185612819565b604051602001611374929190612e1b565b60405160208183030381529060405280519060200120816101000151146114035760405162461bcd60e51b815260206004820152603a60248201527f5461726765742077616c6c65747320646f206e6f74206d61746368207461726760448201527f65742077616c6c65747320636f6d6d69746d656e74206861736800000000000060648201526084016102c7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114899190612e61565b5050505050505050509150915060006114a6846020015187611a85565b90508167ffffffffffffffff168167ffffffffffffffff1610156115585760405162461bcd60e51b815260206004820152604260248201527f536f757263652077616c6c6574204254432062616c616e63652069732062656c60448201527f6f7720746865206d6f76696e672066756e64732064757374207468726573686f60648201527f6c64000000000000000000000000000000000000000000000000000000000000608482015260a4016102c7565b60008760400135116115bc5760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b8267ffffffffffffffff16876040013511156116265760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b60019450505050505b92915050565b600061164c6116476020840184612994565b611b60565b6116985760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420612076616c696420686561727462656174206d65737361676500000060448201526064016102c7565b506001919050565b600082116117005760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b600061170c828461292d565b905060008261171b8386612957565b611725919061296a565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c42b64d06040518163ffffffff1660e01b8152600401608060405180830381865afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190612f44565b5092505067ffffffffffffffff821690506117c68484612ac9565b11156118205760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b5050505050565b8051805160208083015160408085015160609095015190516000956118699561185595909493919201612fd3565b604051602081830303815290604052611bd8565b845190915081146118e25760405162461bcd60e51b815260206004820152602960248201527f457874726120696e666f2066756e64696e67207478206861736820646f65732060448201527f6e6f74206d61746368000000000000000000000000000000000000000000000060648201526084016102c7565b600083836020015184604001518560600151866080015160405160200161190d959493929190613009565b60405160208183030381529060405290506000611945866020015163ffffffff16856000015160400151611bff90919063ffffffff16565b9050600061195282611de1565b905080516014148015611994575061196983611dfb565b6bffffffffffffffffffffffff1916611983826000611e22565b6bffffffffffffffffffffffff1916145b156119a25750505050505050565b80516020148015611a0957506002836040516119be919061328d565b602060405180830381855afa1580156119db573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119fe9190613299565b611a0782611e31565b145b15611a175750505050505050565b60405162461bcd60e51b815260206004820152602f60248201527f457874726120696e666f2066756e64696e67206f75747075742073637269707460448201527f20646f6573206e6f74206d61746368000000000000000000000000000000000060648201526084016102c7565b6000821561162f57828235611aa060408501602086016132b2565b611ab060608601604087016132cf565b604051602001611aed9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014611b505760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f206461746100000060448201526064016102c7565b61119c60608301604084016132cf565b600060108214611b725750600061162f565b611bb6600084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611e229050565b6001600160c01b031990811614611bcf5750600061162f565b50600192915050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6060600080611c0d85611e4c565b909250905060018201611c885760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b808410611cd75760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016102c7565b600080611ce5846001612ac9565b905060005b86811015611d6d57611cfc8883611e63565b92506000198303611d4f5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102c7565b611d598383612ac9565b915080611d6581612adc565b915050611cea565b50611d788782611e63565b91506000198203611dcb5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102c7565b611dd6878284611ed0565b979650505050505050565b606061162f826008808551611df69190612957565b611f9d565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600061119c8383016020015190565b60008151600003611e4457506000919050565b506020015190565b600080611e5a8360006122a2565b91509150915091565b6000611e70826009612ac9565b83511015611e81575060001961162f565b600080611e9885611e93866008612ac9565b6122a2565b909250905060018201611eb1576000199250505061162f565b80611ebd836009612ac9565b611ec79190612ac9565b95945050505050565b606081600003611eef575060408051602081019091526000815261119c565b6000611efb8385612ac9565b90508381118015611f0d575080855110155b611f595760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016102c7565b604051915082604083010160405282825283850182038460208701018481015b80821015611f9257815183830152602082019150611f79565b505050509392505050565b60606000848481518110611fb357611fb361297e565b016020015160f81c905082611fc98260016132ec565b60ff1614611fe757505060408051602081019091526000815261119c565b84611ff3856001612ac9565b815181106120035761200361297e565b016020015160f81c6000036120c25760028160ff16101561203457505060408051602081019091526000815261119c565b600085612042866002612ac9565b815181106120525761205261297e565b016020015160f81c9050612067600283613305565b60ff1681141580612085575080602014158015612085575080601414155b156120a357604051806020016040528060008152509250505061119c565b6120b96120b1866003612ac9565b879083611ed0565b9250505061119c565b60006120ce8686611e22565b90507fffffff000000000000000000000000000000000000000000000000000000000081167f1976a90000000000000000000000000000000000000000000000000000000000036121e25785612125866003612ac9565b815181106121355761213561297e565b60209101015160f81c60141415806121ad575061216860026121578688612ac9565b6121619190612957565b8790611e22565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f88ac00000000000000000000000000000000000000000000000000000000000014155b156121cb57604051806020016040528060008152509250505061119c565b6120b96121d9866004612ac9565b87906014611ed0565b7fffffff000000000000000000000000000000000000000000000000000000000081167f17a914000000000000000000000000000000000000000000000000000000000003612289578560016122388688612ac9565b6122429190612957565b815181106122525761225261297e565b60209101015160f81c60871461227b57604051806020016040528060008152509250505061119c565b6120b96121d9866003612ac9565b5050506040805160208101909152600081529392505050565b60008060006122b18585612446565b90508060ff166000036122e65760008585815181106122d2576122d261297e565b016020015190935060f81c915061243f9050565b836122f28260016132ec565b60ff166122ff9190612ac9565b85511015612316576000196000925092505061243f565b60008160ff1660020361235a5761234f61233b612334876001612ac9565b8890611e22565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612435565b8160ff166004036123a95761239c612376612334876001612ac9565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050612435565b8160ff16600803612435576124286123c5612334876001612ac9565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600082828151811061245a5761245a61297e565b016020015160f81c60ff036124715750600861162f565b8282815181106124835761248361297e565b016020015160f81c60fe0361249a5750600461162f565b8282815181106124ac576124ac61297e565b016020015160f81c60fd036124c35750600261162f565b50600092915050565b6000606082840312156124de57600080fd5b50919050565b6000602082840312156124f657600080fd5b813567ffffffffffffffff81111561250d57600080fd5b612519848285016124cc565b949350505050565b60008060006040848603121561253657600080fd5b833567ffffffffffffffff8082111561254e57600080fd5b908501906080828803121561256257600080fd5b9093506020850135908082111561257857600080fd5b818601915086601f83011261258c57600080fd5b81358181111561259b57600080fd5b8760208260051b85010111156125b057600080fd5b6020830194508093505050509250925092565b600080608083850312156125d657600080fd5b823567ffffffffffffffff8111156125ed57600080fd5b6125f9858286016124cc565b92505061260984602085016124cc565b90509250929050565b60006020828403121561262457600080fd5b813567ffffffffffffffff81111561263b57600080fd5b82016040818503121561119c57600080fd5b634e487b7160e01b600052602160045260246000fd5b80356bffffffffffffffffffffffff198116811461268057600080fd5b919050565b60006020828403121561269757600080fd5b61119c82612663565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156126da576126da6126a0565b60405290565b60405160a0810167ffffffffffffffff811182821017156126da576126da6126a0565b6040516080810167ffffffffffffffff811182821017156126da576126da6126a0565b67ffffffffffffffff8116811461273c57600080fd5b50565b805161268081612726565b63ffffffff8116811461273c57600080fd5b80516126808161274a565b80516006811061268057600080fd5b6000610120828403121561278957600080fd5b6127916126b6565b82518152602083015160208201526127ab6040840161273f565b60408201526127bc6060840161275c565b60608201526127cd6080840161275c565b60808201526127de60a0840161275c565b60a08201526127ef60c0840161275c565b60c082015261280060e08401612767565b60e0820152610100928301519281019290925250919050565b6000808335601e1984360301811261283057600080fd5b83018035915067ffffffffffffffff82111561284b57600080fd5b6020019150600581901b360382131561243f57600080fd5b80516bffffffffffffffffffffffff8116811461268057600080fd5b600080600080600080600060e0888a03121561289a57600080fd5b87516128a581612726565b60208901519097506128b681612726565b60408901519096506128c781612726565b60608901519095506128d881612726565b60808901519094506128e98161274a565b92506128f760a08901612863565b915060c08801516129078161274a565b8091505092959891949750929550565b634e487b7160e01b600052601260045260246000fd5b60008261293c5761293c612917565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111561162f5761162f612941565b60008261297957612979612917565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126129ab57600080fd5b83018035915067ffffffffffffffff8211156129c657600080fd5b60200191503681900382131561243f57600080fd5b80516001600160a01b038116811461268057600080fd5b600060a08284031215612a0457600080fd5b60405160a0810181811067ffffffffffffffff82111715612a2757612a276126a0565b604052612a33836129db565b81526020830151612a4381612726565b60208201526040830151612a5681612726565b60408201526060830151612a6981612726565b60608201526080830151612a7c8161274a565b60808201529392505050565b63ffffffff818116838216019080821115612aa557612aa5612941565b5092915050565b63ffffffff828116828216039080821115612aa557612aa5612941565b8082018082111561162f5761162f612941565b600060018201612aee57612aee612941565b5060010190565b6000808335601e19843603018112612b0c57600080fd5b83018035915067ffffffffffffffff821115612b2757600080fd5b6020019150600681901b360382131561243f57600080fd5b600060408284031215612b5157600080fd5b6040516040810181811067ffffffffffffffff82111715612b7457612b746126a0565b604052823581526020830135612b898161274a565b60208201529392505050565b60008235609e19833603018112612bab57600080fd5b9190910192915050565b80356001600160e01b03198116811461268057600080fd5b600082601f830112612bde57600080fd5b813567ffffffffffffffff80821115612bf957612bf96126a0565b604051601f8301601f19908116603f01168101908282118183101715612c2157612c216126a0565b81604052838152866020858801011115612c3a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160c01b03198116811461268057600080fd5b600060a08236031215612c8457600080fd5b612c8c6126e0565b823567ffffffffffffffff80821115612ca457600080fd5b818501915060808236031215612cb957600080fd5b612cc1612703565b612cca83612bb5565b8152602083013582811115612cde57600080fd5b612cea36828601612bcd565b602083015250604083013582811115612d0257600080fd5b612d0e36828601612bcd565b604083015250612d2060608401612bb5565b6060820152835250612d36905060208401612c5a565b6020820152612d4760408401612663565b6040820152612d5860608401612663565b6060820152612d6960808401612bb5565b608082015292915050565b600060c08284031215612d8657600080fd5b60405160c0810181811067ffffffffffffffff82111715612da957612da96126a0565b604052612db5836129db565b81526020830151612dc581612726565b60208201526040830151612dd88161274a565b6040820152612de9606084016129db565b60608201526080830151612dfc81612726565b608082015260a0830151612e0f8161274a565b60a08201529392505050565b60008184825b85811015612e56576bffffffffffffffffffffffff19612e4083612663565b1683526020928301929190910190600101612e21565b509095945050505050565b60008060008060008060008060008060006101608c8e031215612e8357600080fd5b8b51612e8e81612726565b60208d0151909b50612e9f81612726565b60408d0151909a50612eb08161274a565b60608d0151909950612ec18161274a565b9750612ecf60808d01612863565b965060a08c0151612edf8161274a565b60c08d015190965061ffff81168114612ef757600080fd5b9450612f0560e08d0161273f565b9350612f146101008d0161275c565b9250612f236101208d01612863565b9150612f326101408d0161275c565b90509295989b509295989b9093969950565b60008060008060808587031215612f5a57600080fd5b8451612f6581612726565b6020860151909450612f7681612726565b6040860151909350612f8781612726565b6060860151909250612f988161274a565b939692955090935050565b6000815160005b81811015612fc45760208185018101518683015201612faa565b50600093019283525090919050565b60006001600160e01b03198087168352612ff9612ff36004850188612fa3565b86612fa3565b9316835250506004019392505050565b600560fa1b8152606086901b6bffffffffffffffffffffffff19166001820152607560f81b60158201527f080000000000000000000000000000000000000000000000000000000000000060168201526001600160c01b031985166017820152607560f81b601f82015260006130e26130d56130ac602085015b7f7600000000000000000000000000000000000000000000000000000000000000815260010190565b7fa900000000000000000000000000000000000000000000000000000000000000815260010190565b600560fa1b815260010190565b6bffffffffffffffffffffffff19861681527f870000000000000000000000000000000000000000000000000000000000000060148201527f630000000000000000000000000000000000000000000000000000000000000060158201526131a66130d56130ac61308361317d601686015b7fac00000000000000000000000000000000000000000000000000000000000000815260010190565b7f6700000000000000000000000000000000000000000000000000000000000000815260010190565b6bffffffffffffffffffffffff19861681527f880000000000000000000000000000000000000000000000000000000000000060148201527f040000000000000000000000000000000000000000000000000000000000000060158201529050601681016001600160e01b0319851681527fb1000000000000000000000000000000000000000000000000000000000000006004820152607560f81b6005820152905061328161325860068301613154565b7f6800000000000000000000000000000000000000000000000000000000000000815260010190565b98975050505050505050565b600061119c8284612fa3565b6000602082840312156132ab57600080fd5b5051919050565b6000602082840312156132c457600080fd5b813561119c8161274a565b6000602082840312156132e157600080fd5b813561119c81612726565b60ff818116838216019081111561162f5761162f612941565b60ff828116828216039081111561162f5761162f61294156fea26469706673582212209c2e83078c9c351fac3b769b63f36805bccbf2b492482c4840a817fa5d635c3c64736f6c63430008110033",
342
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063996a756b11610081578063e0276b261161005b578063e0276b2614610131578063e78cea9214610168578063f03a4bc5146101a757600080fd5b8063996a756b146101315780639b337db21461014c578063d09520f71461015f57600080fd5b80636b562cec116100b25780636b562cec146100ce5780637405d7bf14610114578063765f28f91461012757600080fd5b80630538ac1b146100ce5780630fde6c76146100f1575b600080fd5b6100d7611c2081565b60405163ffffffff90911681526020015b60405180910390f35b6101046100ff3660046124e4565b6101ba565b60405190151581526020016100e8565b610104610122366004612521565b6109b6565b6100d76201518081565b610139601481565b60405161ffff90911681526020016100e8565b61010461015a3660046125c3565b6111a3565b6100d761025881565b61018f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e8565b6101046101b5366004612612565b611635565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56101fa6020860186612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa158015610245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102699190612776565b60e00151600581111561027e5761027e61264d565b146102d05760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064015b60405180910390fd5b60006102df6020840184612819565b9150508061032f5760405162461bcd60e51b815260206004820152601d60248201527f526564656d7074696f6e2062656c6f7720746865206d696e2073697a6500000060448201526064016102c7565b60148111156103805760405162461bcd60e51b815260206004820152601f60248201527f526564656d7074696f6e206578636565647320746865206d61782073697a650060448201526064016102c7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e70ce416040518163ffffffff1660e01b815260040160e060405180830381865afa1580156103e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610405919061287f565b50509450945050505060008560400135116104725760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b8167ffffffffffffffff16856040013511156104dc5760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b60006104ec84604088013561292d565b90506000846104ff8360408a0135612957565b610509919061296a565b905060008567ffffffffffffffff811115610526576105266126a0565b60405190808252806020026020018201604052801561054f578160200160208202803683370190505b50905060005b868110156109a757600061056c60208b018b612819565b8381811061057c5761057c61297e565b905060200281019061058e9190612994565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120959650909493506105df92508e0190508d612685565b6040516020016106089291909182526bffffffffffffffffffffffff1916602082015260340190565b60408051808303601f190181529082905280516020909101207f03d952f70000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906303d952f79060240160a060405180830381865afa1580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c591906129f2565b9050806080015163ffffffff166000036107215760405162461bcd60e51b815260206004820181905260248201527f4e6f7420612070656e64696e6720726564656d7074696f6e207265717565737460448201526064016102c7565b61025881608001516107339190612a88565b63ffffffff1642116107ad5760405162461bcd60e51b815260206004820152602b60248201527f526564656d7074696f6e2072657175657374206d696e20616765206e6f74206160448201527f636869657665642079657400000000000000000000000000000000000000000060648201526084016102c7565b60008882608001516107bf9190612a88565b90506107cd611c2082612aac565b63ffffffff1642106108475760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e20726571756573742074696d656f757420736166657460448201527f79206d617267696e206973206e6f74207072657365727665640000000000000060648201526084016102c7565b8661085360018d612957565b8603610866576108638982612ac9565b90505b826060015167ffffffffffffffff168111156108ea5760405162461bcd60e51b815260206004820152603660248201527f50726f706f736564207472616e73616374696f6e207065722d7265717565737460448201527f2066656520736861726520697320746f6f20686967680000000000000000000060648201526084016102c7565b60005b8681101561096f57848882815181106109085761090861297e565b60200260200101510361095d5760405162461bcd60e51b815260206004820152601260248201527f4475706c6963617465642072657175657374000000000000000000000000000060448201526064016102c7565b8061096781612adc565b9150506108ed565b50838787815181106109835761098361297e565b6020026020010181815250505050505050808061099f90612adc565b915050610555565b50600198975050505050505050565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56109f66020880188612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190612776565b60e001516005811115610a7a57610a7a61264d565b14610ac75760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064016102c7565b6000610ad66020860186612af5565b905011610b255760405162461bcd60e51b815260206004820152601860248201527f53776565702062656c6f7720746865206d696e2073697a65000000000000000060448201526064016102c7565b6014610b346020860186612af5565b90501115610b845760405162461bcd60e51b815260206004820152601a60248201527f5377656570206578636565647320746865206d61782073697a6500000000000060448201526064016102c7565b81610b926020860186612af5565b905014610c075760405162461bcd60e51b815260206004820152602e60248201527f45616368206465706f736974206b6579206d7573742068617665206d6174636860448201527f696e67206578747261206461746100000000000000000000000000000000000060648201526084016102c7565b610c236040850135610c1c6020870187612af5565b90506116a0565b600080610c336020870187612af5565b905067ffffffffffffffff811115610c4d57610c4d6126a0565b604051908082528060200260200182016040528015610c76578160200160208202803683370190505b50905060005b610c896020880188612af5565b9050811015611194576000610ca16020890189612af5565b83818110610cb157610cb161297e565b905060400201803603810190610cc79190612b3f565b90506000878784818110610cdd57610cdd61297e565b9050602002810190610cef9190612b95565b610cf890612c72565b8251602080850151604051939450600093610d2a93920191825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207fb02c43d00000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160c060405180830381865afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190612d74565b9050806040015163ffffffff16600003610e435760405162461bcd60e51b815260206004820152601460248201527f4465706f736974206e6f742072657665616c656400000000000000000000000060448201526064016102c7565b611c208160400151610e559190612a88565b63ffffffff164211610ea95760405162461bcd60e51b815260206004820181905260248201527f4465706f736974206d696e20616765206e6f742061636869657665642079657460448201526064016102c7565b60a081015163ffffffff1615610f015760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016102c7565b610f1084826000015185611827565b608083015160e881901c62ff00ff1663ff00ff0060d89290921c9190911617601081811c91901b17610f456201518082612aac565b63ffffffff164210610fbf5760405162461bcd60e51b815260206004820152602d60248201527f4465706f73697420726566756e6420736166657479206d617267696e2069732060448201527f6e6f74207072657365727665640000000000000000000000000000000000000060648201526084016102c7565b610fcc60208d018d612685565b6bffffffffffffffffffffffff191684604001516bffffffffffffffffffffffff1916146110625760405162461bcd60e51b815260206004820152602660248201527f4465706f73697420636f6e74726f6c6c656420627920646966666572656e742060448201527f77616c6c6574000000000000000000000000000000000000000000000000000060648201526084016102c7565b8560000361107257816060015197505b876001600160a01b031682606001516001600160a01b0316146110d75760405162461bcd60e51b815260206004820152601f60248201527f4465706f736974207461726765747320646966666572656e74207661756c740060448201526064016102c7565b60005b8681101561115c57838882815181106110f5576110f561297e565b60200260200101510361114a5760405162461bcd60e51b815260206004820152601260248201527f4475706c696361746564206465706f736974000000000000000000000000000060448201526064016102c7565b8061115481612adc565b9150506110da565b50828787815181106111705761117061297e565b6020026020010181815250505050505050808061118c90612adc565b915050610c7c565b506001925050505b9392505050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56111e26020870187612685565b6040516001600160e01b031960e084901b1681526bffffffffffffffffffffffff19909116600482015260240161012060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190612776565b905060028160e00151600581111561126b5761126b61264d565b146112de5760405162461bcd60e51b815260206004820152602960248201527f536f757263652077616c6c6574206973206e6f7420696e204d6f76696e67467560448201527f6e6473207374617465000000000000000000000000000000000000000000000060648201526084016102c7565b6101008101516113565760405162461bcd60e51b815260206004820152602a60248201527f5461726765742077616c6c65747320636f6d6d69746d656e74206973206e6f7460448201527f207375626d69747465640000000000000000000000000000000000000000000060648201526084016102c7565b6113636020850185612819565b604051602001611374929190612e1b565b60405160208183030381529060405280519060200120816101000151146114035760405162461bcd60e51b815260206004820152603a60248201527f5461726765742077616c6c65747320646f206e6f74206d61746368207461726760448201527f65742077616c6c65747320636f6d6d69746d656e74206861736800000000000060648201526084016102c7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114899190612e61565b5050505050505050509150915060006114a6846020015187611a85565b90508167ffffffffffffffff168167ffffffffffffffff1610156115585760405162461bcd60e51b815260206004820152604260248201527f536f757263652077616c6c6574204254432062616c616e63652069732062656c60448201527f6f7720746865206d6f76696e672066756e64732064757374207468726573686f60648201527f6c64000000000000000000000000000000000000000000000000000000000000608482015260a4016102c7565b60008760400135116115bc5760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b8267ffffffffffffffff16876040013511156116265760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b60019450505050505b92915050565b600061164c6116476020840184612994565b611b60565b6116985760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420612076616c696420686561727462656174206d65737361676500000060448201526064016102c7565b506001919050565b600082116117005760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102c7565b600061170c828461292d565b905060008261171b8386612957565b611725919061296a565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c42b64d06040518163ffffffff1660e01b8152600401608060405180830381865afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190612f44565b5092505067ffffffffffffffff821690506117c68484612ac9565b11156118205760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102c7565b5050505050565b8051805160208083015160408085015160609095015190516000956118699561185595909493919201612fd3565b604051602081830303815290604052611bd8565b845190915081146118e25760405162461bcd60e51b815260206004820152602960248201527f457874726120696e666f2066756e64696e67207478206861736820646f65732060448201527f6e6f74206d61746368000000000000000000000000000000000000000000000060648201526084016102c7565b600083836020015184604001518560600151866080015160405160200161190d959493929190613009565b60405160208183030381529060405290506000611945866020015163ffffffff16856000015160400151611bff90919063ffffffff16565b9050600061195282611de1565b905080516014148015611994575061196983611dfb565b6bffffffffffffffffffffffff1916611983826000611e22565b6bffffffffffffffffffffffff1916145b156119a25750505050505050565b80516020148015611a0957506002836040516119be919061328d565b602060405180830381855afa1580156119db573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119fe9190613299565b611a0782611e31565b145b15611a175750505050505050565b60405162461bcd60e51b815260206004820152602f60248201527f457874726120696e666f2066756e64696e67206f75747075742073637269707460448201527f20646f6573206e6f74206d61746368000000000000000000000000000000000060648201526084016102c7565b6000821561162f57828235611aa060408501602086016132b2565b611ab060608601604087016132cf565b604051602001611aed9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014611b505760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f206461746100000060448201526064016102c7565b61119c60608301604084016132cf565b600060108214611b725750600061162f565b611bb6600084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611e229050565b6001600160c01b031990811614611bcf5750600061162f565b50600192915050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6060600080611c0d85611e4c565b909250905060018201611c885760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016102c7565b808410611cd75760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016102c7565b600080611ce5846001612ac9565b905060005b86811015611d6d57611cfc8883611e63565b92506000198303611d4f5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102c7565b611d598383612ac9565b915080611d6581612adc565b915050611cea565b50611d788782611e63565b91506000198203611dcb5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102c7565b611dd6878284611ed0565b979650505050505050565b606061162f826008808551611df69190612957565b611f9d565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600061119c8383016020015190565b60008151600003611e4457506000919050565b506020015190565b600080611e5a8360006122a2565b91509150915091565b6000611e70826009612ac9565b83511015611e81575060001961162f565b600080611e9885611e93866008612ac9565b6122a2565b909250905060018201611eb1576000199250505061162f565b80611ebd836009612ac9565b611ec79190612ac9565b95945050505050565b606081600003611eef575060408051602081019091526000815261119c565b6000611efb8385612ac9565b90508381118015611f0d575080855110155b611f595760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016102c7565b604051915082604083010160405282825283850182038460208701018481015b80821015611f9257815183830152602082019150611f79565b505050509392505050565b60606000848481518110611fb357611fb361297e565b016020015160f81c905082611fc98260016132ec565b60ff1614611fe757505060408051602081019091526000815261119c565b84611ff3856001612ac9565b815181106120035761200361297e565b016020015160f81c6000036120c25760028160ff16101561203457505060408051602081019091526000815261119c565b600085612042866002612ac9565b815181106120525761205261297e565b016020015160f81c9050612067600283613305565b60ff1681141580612085575080602014158015612085575080601414155b156120a357604051806020016040528060008152509250505061119c565b6120b96120b1866003612ac9565b879083611ed0565b9250505061119c565b60006120ce8686611e22565b90507fffffff000000000000000000000000000000000000000000000000000000000081167f1976a90000000000000000000000000000000000000000000000000000000000036121e25785612125866003612ac9565b815181106121355761213561297e565b60209101015160f81c60141415806121ad575061216860026121578688612ac9565b6121619190612957565b8790611e22565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f88ac00000000000000000000000000000000000000000000000000000000000014155b156121cb57604051806020016040528060008152509250505061119c565b6120b96121d9866004612ac9565b87906014611ed0565b7fffffff000000000000000000000000000000000000000000000000000000000081167f17a914000000000000000000000000000000000000000000000000000000000003612289578560016122388688612ac9565b6122429190612957565b815181106122525761225261297e565b60209101015160f81c60871461227b57604051806020016040528060008152509250505061119c565b6120b96121d9866003612ac9565b5050506040805160208101909152600081529392505050565b60008060006122b18585612446565b90508060ff166000036122e65760008585815181106122d2576122d261297e565b016020015190935060f81c915061243f9050565b836122f28260016132ec565b60ff166122ff9190612ac9565b85511015612316576000196000925092505061243f565b60008160ff1660020361235a5761234f61233b612334876001612ac9565b8890611e22565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612435565b8160ff166004036123a95761239c612376612334876001612ac9565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050612435565b8160ff16600803612435576124286123c5612334876001612ac9565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600082828151811061245a5761245a61297e565b016020015160f81c60ff036124715750600861162f565b8282815181106124835761248361297e565b016020015160f81c60fe0361249a5750600461162f565b8282815181106124ac576124ac61297e565b016020015160f81c60fd036124c35750600261162f565b50600092915050565b6000606082840312156124de57600080fd5b50919050565b6000602082840312156124f657600080fd5b813567ffffffffffffffff81111561250d57600080fd5b612519848285016124cc565b949350505050565b60008060006040848603121561253657600080fd5b833567ffffffffffffffff8082111561254e57600080fd5b908501906080828803121561256257600080fd5b9093506020850135908082111561257857600080fd5b818601915086601f83011261258c57600080fd5b81358181111561259b57600080fd5b8760208260051b85010111156125b057600080fd5b6020830194508093505050509250925092565b600080608083850312156125d657600080fd5b823567ffffffffffffffff8111156125ed57600080fd5b6125f9858286016124cc565b92505061260984602085016124cc565b90509250929050565b60006020828403121561262457600080fd5b813567ffffffffffffffff81111561263b57600080fd5b82016040818503121561119c57600080fd5b634e487b7160e01b600052602160045260246000fd5b80356bffffffffffffffffffffffff198116811461268057600080fd5b919050565b60006020828403121561269757600080fd5b61119c82612663565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156126da576126da6126a0565b60405290565b60405160a0810167ffffffffffffffff811182821017156126da576126da6126a0565b6040516080810167ffffffffffffffff811182821017156126da576126da6126a0565b67ffffffffffffffff8116811461273c57600080fd5b50565b805161268081612726565b63ffffffff8116811461273c57600080fd5b80516126808161274a565b80516006811061268057600080fd5b6000610120828403121561278957600080fd5b6127916126b6565b82518152602083015160208201526127ab6040840161273f565b60408201526127bc6060840161275c565b60608201526127cd6080840161275c565b60808201526127de60a0840161275c565b60a08201526127ef60c0840161275c565b60c082015261280060e08401612767565b60e0820152610100928301519281019290925250919050565b6000808335601e1984360301811261283057600080fd5b83018035915067ffffffffffffffff82111561284b57600080fd5b6020019150600581901b360382131561243f57600080fd5b80516bffffffffffffffffffffffff8116811461268057600080fd5b600080600080600080600060e0888a03121561289a57600080fd5b87516128a581612726565b60208901519097506128b681612726565b60408901519096506128c781612726565b60608901519095506128d881612726565b60808901519094506128e98161274a565b92506128f760a08901612863565b915060c08801516129078161274a565b8091505092959891949750929550565b634e487b7160e01b600052601260045260246000fd5b60008261293c5761293c612917565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111561162f5761162f612941565b60008261297957612979612917565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126129ab57600080fd5b83018035915067ffffffffffffffff8211156129c657600080fd5b60200191503681900382131561243f57600080fd5b80516001600160a01b038116811461268057600080fd5b600060a08284031215612a0457600080fd5b60405160a0810181811067ffffffffffffffff82111715612a2757612a276126a0565b604052612a33836129db565b81526020830151612a4381612726565b60208201526040830151612a5681612726565b60408201526060830151612a6981612726565b60608201526080830151612a7c8161274a565b60808201529392505050565b63ffffffff818116838216019080821115612aa557612aa5612941565b5092915050565b63ffffffff828116828216039080821115612aa557612aa5612941565b8082018082111561162f5761162f612941565b600060018201612aee57612aee612941565b5060010190565b6000808335601e19843603018112612b0c57600080fd5b83018035915067ffffffffffffffff821115612b2757600080fd5b6020019150600681901b360382131561243f57600080fd5b600060408284031215612b5157600080fd5b6040516040810181811067ffffffffffffffff82111715612b7457612b746126a0565b604052823581526020830135612b898161274a565b60208201529392505050565b60008235609e19833603018112612bab57600080fd5b9190910192915050565b80356001600160e01b03198116811461268057600080fd5b600082601f830112612bde57600080fd5b813567ffffffffffffffff80821115612bf957612bf96126a0565b604051601f8301601f19908116603f01168101908282118183101715612c2157612c216126a0565b81604052838152866020858801011115612c3a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160c01b03198116811461268057600080fd5b600060a08236031215612c8457600080fd5b612c8c6126e0565b823567ffffffffffffffff80821115612ca457600080fd5b818501915060808236031215612cb957600080fd5b612cc1612703565b612cca83612bb5565b8152602083013582811115612cde57600080fd5b612cea36828601612bcd565b602083015250604083013582811115612d0257600080fd5b612d0e36828601612bcd565b604083015250612d2060608401612bb5565b6060820152835250612d36905060208401612c5a565b6020820152612d4760408401612663565b6040820152612d5860608401612663565b6060820152612d6960808401612bb5565b608082015292915050565b600060c08284031215612d8657600080fd5b60405160c0810181811067ffffffffffffffff82111715612da957612da96126a0565b604052612db5836129db565b81526020830151612dc581612726565b60208201526040830151612dd88161274a565b6040820152612de9606084016129db565b60608201526080830151612dfc81612726565b608082015260a0830151612e0f8161274a565b60a08201529392505050565b60008184825b85811015612e56576bffffffffffffffffffffffff19612e4083612663565b1683526020928301929190910190600101612e21565b509095945050505050565b60008060008060008060008060008060006101608c8e031215612e8357600080fd5b8b51612e8e81612726565b60208d0151909b50612e9f81612726565b60408d0151909a50612eb08161274a565b60608d0151909950612ec18161274a565b9750612ecf60808d01612863565b965060a08c0151612edf8161274a565b60c08d015190965061ffff81168114612ef757600080fd5b9450612f0560e08d0161273f565b9350612f146101008d0161275c565b9250612f236101208d01612863565b9150612f326101408d0161275c565b90509295989b509295989b9093969950565b60008060008060808587031215612f5a57600080fd5b8451612f6581612726565b6020860151909450612f7681612726565b6040860151909350612f8781612726565b6060860151909250612f988161274a565b939692955090935050565b6000815160005b81811015612fc45760208185018101518683015201612faa565b50600093019283525090919050565b60006001600160e01b03198087168352612ff9612ff36004850188612fa3565b86612fa3565b9316835250506004019392505050565b600560fa1b8152606086901b6bffffffffffffffffffffffff19166001820152607560f81b60158201527f080000000000000000000000000000000000000000000000000000000000000060168201526001600160c01b031985166017820152607560f81b601f82015260006130e26130d56130ac602085015b7f7600000000000000000000000000000000000000000000000000000000000000815260010190565b7fa900000000000000000000000000000000000000000000000000000000000000815260010190565b600560fa1b815260010190565b6bffffffffffffffffffffffff19861681527f870000000000000000000000000000000000000000000000000000000000000060148201527f630000000000000000000000000000000000000000000000000000000000000060158201526131a66130d56130ac61308361317d601686015b7fac00000000000000000000000000000000000000000000000000000000000000815260010190565b7f6700000000000000000000000000000000000000000000000000000000000000815260010190565b6bffffffffffffffffffffffff19861681527f880000000000000000000000000000000000000000000000000000000000000060148201527f040000000000000000000000000000000000000000000000000000000000000060158201529050601681016001600160e01b0319851681527fb1000000000000000000000000000000000000000000000000000000000000006004820152607560f81b6005820152905061328161325860068301613154565b7f6800000000000000000000000000000000000000000000000000000000000000815260010190565b98975050505050505050565b600061119c8284612fa3565b6000602082840312156132ab57600080fd5b5051919050565b6000602082840312156132c457600080fd5b813561119c8161274a565b6000602082840312156132e157600080fd5b813561119c81612726565b60ff818116838216019081111561162f5761162f612941565b60ff828116828216039081111561162f5761162f61294156fea26469706673582212209c2e83078c9c351fac3b769b63f36805bccbf2b492482c4840a817fa5d635c3c64736f6c63430008110033",
382
+ "bytecode": "0x60a06040523480156200001157600080fd5b50604051620039b1380380620039b1833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b6080516138d0620000e16000396000818161018b015281816101e60152818161039e01528181610666015281816109d801528181610d83015281816111bf015281816114120152818161164c0152818161181d015281816119b10152611c0e01526138d06000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b337db211610081578063e0276b261161005b578063e0276b261461013c578063e78cea9214610186578063f03a4bc5146101c557600080fd5b80639b337db214610157578063d09520f71461016a578063d6c7fa781461017357600080fd5b80637405d7bf116100b25780637405d7bf1461011f578063765f28f914610132578063996a756b1461013c57600080fd5b80630538ac1b146100d95780630fde6c76146100fc5780636b562cec146100d9575b600080fd5b6100e2611c2081565b60405163ffffffff90911681526020015b60405180910390f35b61010f61010a3660046129bd565b6101d8565b60405190151581526020016100f3565b61010f61012d366004612a0c565b6109ca565b6100e26201518081565b610144601481565b60405161ffff90911681526020016100f3565b61010f610165366004612aa6565b6111b2565b6100e261025881565b61010f610181366004612af5565b61163f565b6101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100f3565b61010f6101d3366004612b11565b611b18565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56102186020860186612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa15801561025e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102829190612c7b565b60e00151600581111561029757610297612b4c565b146102e95760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064015b60405180910390fd5b60006102f86020840184612d1e565b915050806103485760405162461bcd60e51b815260206004820152601d60248201527f526564656d7074696f6e2062656c6f7720746865206d696e2073697a6500000060448201526064016102e0565b60148111156103995760405162461bcd60e51b815260206004820152601f60248201527f526564656d7074696f6e206578636565647320746865206d61782073697a650060448201526064016102e0565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e70ce416040518163ffffffff1660e01b815260040160e060405180830381865afa1580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190612d84565b505094509450505050600085604001351161048b5760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8167ffffffffffffffff16856040013511156104f55760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b6000610505846040880135612e32565b90506000846105188360408a0135612e5c565b6105229190612e6f565b905060008567ffffffffffffffff81111561053f5761053f612ba8565b604051908082528060200260200182016040528015610568578160200160208202803683370190505b50905060005b868110156109bb57600061058560208b018b612d1e565b8381811061059557610595612e83565b90506020028101906105a79190612e99565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120959650909493506105f892508e0190508d612b8b565b60405160200161061c9291909182526001600160601b031916602082015260340190565b60408051808303601f190181529082905280516020909101207f03d952f70000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906303d952f79060240160a060405180830381865afa1580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190612ef7565b9050806080015163ffffffff166000036107355760405162461bcd60e51b815260206004820181905260248201527f4e6f7420612070656e64696e6720726564656d7074696f6e207265717565737460448201526064016102e0565b61025881608001516107479190612f8d565b63ffffffff1642116107c15760405162461bcd60e51b815260206004820152602b60248201527f526564656d7074696f6e2072657175657374206d696e20616765206e6f74206160448201527f636869657665642079657400000000000000000000000000000000000000000060648201526084016102e0565b60008882608001516107d39190612f8d565b90506107e1611c2082612fb1565b63ffffffff16421061085b5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e20726571756573742074696d656f757420736166657460448201527f79206d617267696e206973206e6f74207072657365727665640000000000000060648201526084016102e0565b8661086760018d612e5c565b860361087a576108778982612fce565b90505b826060015167ffffffffffffffff168111156108fe5760405162461bcd60e51b815260206004820152603660248201527f50726f706f736564207472616e73616374696f6e207065722d7265717565737460448201527f2066656520736861726520697320746f6f20686967680000000000000000000060648201526084016102e0565b60005b86811015610983578488828151811061091c5761091c612e83565b6020026020010151036109715760405162461bcd60e51b815260206004820152601260248201527f4475706c6963617465642072657175657374000000000000000000000000000060448201526064016102e0565b8061097b81612fe1565b915050610901565b508387878151811061099757610997612e83565b602002602001018181525050505050505080806109b390612fe1565b91505061056e565b50600198975050505050505050565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d5610a0a6020880188612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190612c7b565b60e001516005811115610a8957610a89612b4c565b14610ad65760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064016102e0565b6000610ae56020860186612ffa565b905011610b345760405162461bcd60e51b815260206004820152601860248201527f53776565702062656c6f7720746865206d696e2073697a65000000000000000060448201526064016102e0565b6014610b436020860186612ffa565b90501115610b935760405162461bcd60e51b815260206004820152601a60248201527f5377656570206578636565647320746865206d61782073697a6500000000000060448201526064016102e0565b81610ba16020860186612ffa565b905014610c165760405162461bcd60e51b815260206004820152602e60248201527f45616368206465706f736974206b6579206d7573742068617665206d6174636860448201527f696e67206578747261206461746100000000000000000000000000000000000060648201526084016102e0565b610c326040850135610c2b6020870187612ffa565b9050611b83565b600080610c426020870187612ffa565b905067ffffffffffffffff811115610c5c57610c5c612ba8565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b50905060005b610c986020880188612ffa565b90508110156111a3576000610cb06020890189612ffa565b83818110610cc057610cc0612e83565b905060400201803603810190610cd69190613044565b90506000878784818110610cec57610cec612e83565b9050602002810190610cfe919061309a565b610d0790613177565b8251602080850151604051939450600093610d3993920191825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207fb02c43d00000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160c060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190613279565b9050806040015163ffffffff16600003610e525760405162461bcd60e51b815260206004820152601460248201527f4465706f736974206e6f742072657665616c656400000000000000000000000060448201526064016102e0565b611c208160400151610e649190612f8d565b63ffffffff164211610eb85760405162461bcd60e51b815260206004820181905260248201527f4465706f736974206d696e20616765206e6f742061636869657665642079657460448201526064016102e0565b60a081015163ffffffff1615610f105760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016102e0565b610f1f84826000015185611d0a565b608083015160e881901c62ff00ff1663ff00ff0060d89290921c9190911617601081811c91901b17610f546201518082612fb1565b63ffffffff164210610fce5760405162461bcd60e51b815260206004820152602d60248201527f4465706f73697420726566756e6420736166657479206d617267696e2069732060448201527f6e6f74207072657365727665640000000000000000000000000000000000000060648201526084016102e0565b610fdb60208d018d612b8b565b6bffffffffffffffffffffffff191684604001516bffffffffffffffffffffffff1916146110715760405162461bcd60e51b815260206004820152602660248201527f4465706f73697420636f6e74726f6c6c656420627920646966666572656e742060448201527f77616c6c6574000000000000000000000000000000000000000000000000000060648201526084016102e0565b8560000361108157816060015197505b876001600160a01b031682606001516001600160a01b0316146110e65760405162461bcd60e51b815260206004820152601f60248201527f4465706f736974207461726765747320646966666572656e74207661756c740060448201526064016102e0565b60005b8681101561116b578388828151811061110457611104612e83565b6020026020010151036111595760405162461bcd60e51b815260206004820152601260248201527f4475706c696361746564206465706f736974000000000000000000000000000060448201526064016102e0565b8061116381612fe1565b9150506110e9565b508287878151811061117f5761117f612e83565b6020026020010181815250505050505050808061119b90612fe1565b915050610c8b565b506001925050505b9392505050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56111f16020870187612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b9190612c7b565b905060028160e00151600581111561127557611275612b4c565b146112e85760405162461bcd60e51b815260206004820152602960248201527f536f757263652077616c6c6574206973206e6f7420696e204d6f76696e67467560448201527f6e6473207374617465000000000000000000000000000000000000000000000060648201526084016102e0565b6101008101516113605760405162461bcd60e51b815260206004820152602a60248201527f5461726765742077616c6c65747320636f6d6d69746d656e74206973206e6f7460448201527f207375626d69747465640000000000000000000000000000000000000000000060648201526084016102e0565b61136d6020850185612d1e565b60405160200161137e929190613320565b604051602081830303815290604052805190602001208161010001511461140d5760405162461bcd60e51b815260206004820152603a60248201527f5461726765742077616c6c65747320646f206e6f74206d61746368207461726760448201527f65742077616c6c65747320636f6d6d69746d656e74206861736800000000000060648201526084016102e0565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa15801561146f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114939190613363565b5050505050505050509150915060006114b0846020015187611f5e565b90508167ffffffffffffffff168167ffffffffffffffff1610156115625760405162461bcd60e51b815260206004820152604260248201527f536f757263652077616c6c6574204254432062616c616e63652069732062656c60448201527f6f7720746865206d6f76696e672066756e64732064757374207468726573686f60648201527f6c64000000000000000000000000000000000000000000000000000000000000608482015260a4016102e0565b60008760400135116115c65760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8267ffffffffffffffff16876040013511156116305760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b60019450505050505b92915050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d561167e6020860186612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190612c7b565b905060018160e00151600581111561170257611702612b4c565b1480611723575060028160e00151600581111561172157611721612b4c565b145b6117955760405162461bcd60e51b815260206004820152603160248201527f536f757263652077616c6c6574206973206e6f7420696e204c697665206f722060448201527f4d6f76696e6746756e647320737461746500000000000000000000000000000060648201526084016102e0565b600060208401356117ac6060860160408701613446565b6040516020016117d392919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207ff18cf1b10000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f18cf1b190602401608060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190613463565b90506001816060015160038111156118aa576118aa612b4c565b1461191d5760405162461bcd60e51b815260206004820152602560248201527f53776565702072657175657374206973206e6f7420696e2050656e64696e672060448201527f737461746500000000000000000000000000000000000000000000000000000060648201526084016102e0565b61192a6020860186612b8b565b81516001600160601b03199081169116146119ad5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207265717565737420646f6573206e6f742062656c6f6e6720746f60448201527f207468652077616c6c657400000000000000000000000000000000000000000060648201526084016102e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190613363565b5050509750505050505050506000866060013511611aa25760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8067ffffffffffffffff1686606001351115611b0c5760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b50600195945050505050565b6000611b2f611b2a6020840184612e99565b612039565b611b7b5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420612076616c696420686561727462656174206d65737361676500000060448201526064016102e0565b506001919050565b60008211611be35760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b6000611bef8284612e32565b9050600082611bfe8386612e5c565b611c089190612e6f565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c42b64d06040518163ffffffff1660e01b8152600401608060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e91906134ec565b5092505067ffffffffffffffff82169050611ca98484612fce565b1115611d035760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b5050505050565b805180516020808301516040808501516060909501519051600095611d4c95611d389590949391920161357b565b6040516020818303038152906040526120b1565b84519091508114611dc55760405162461bcd60e51b815260206004820152602960248201527f457874726120696e666f2066756e64696e67207478206861736820646f65732060448201527f6e6f74206d61746368000000000000000000000000000000000000000000000060648201526084016102e0565b6000838360200151846040015185606001518660800151604051602001611df09594939291906135b1565b60405160208183030381529060405290506000611e28866020015163ffffffff168560000151604001516120d890919063ffffffff16565b90506000611e35826122ba565b905080516014148015611e6d5750611e4c836122d4565b6001600160601b031916611e618260006122fb565b6001600160601b031916145b15611e7b5750505050505050565b80516020148015611ee25750600283604051611e979190613826565b602060405180830381855afa158015611eb4573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611ed79190613832565b611ee08261230a565b145b15611ef05750505050505050565b60405162461bcd60e51b815260206004820152602f60248201527f457874726120696e666f2066756e64696e67206f75747075742073637269707460448201527f20646f6573206e6f74206d61746368000000000000000000000000000000000060648201526084016102e0565b6000821561163957828235611f796040850160208601613446565b611f89606086016040870161384b565b604051602001611fc69392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146120295760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f206461746100000060448201526064016102e0565b6111ab606083016040840161384b565b60006010821461204b57506000611639565b61208f600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506122fb9050565b6001600160c01b0319908116146120a857506000611639565b50600192915050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60606000806120e685612325565b9092509050600182016121615760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016102e0565b8084106121b05760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016102e0565b6000806121be846001612fce565b905060005b86811015612246576121d5888361233c565b925060001983036122285760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102e0565b6122328383612fce565b91508061223e81612fe1565b9150506121c3565b50612251878261233c565b915060001982036122a45760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102e0565b6122af8782846123a9565b979650505050505050565b60606116398260088085516122cf9190612e5c565b612476565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b60006111ab8383016020015190565b6000815160000361231d57506000919050565b506020015190565b60008061233383600061277b565b91509150915091565b6000612349826009612fce565b8351101561235a5750600019611639565b6000806123718561236c866008612fce565b61277b565b90925090506001820161238a5760001992505050611639565b80612396836009612fce565b6123a09190612fce565b95945050505050565b6060816000036123c857506040805160208101909152600081526111ab565b60006123d48385612fce565b905083811180156123e6575080855110155b6124325760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016102e0565b604051915082604083010160405282825283850182038460208701018481015b8082101561246b57815183830152602082019150612452565b505050509392505050565b6060600084848151811061248c5761248c612e83565b016020015160f81c9050826124a2826001613868565b60ff16146124c05750506040805160208101909152600081526111ab565b846124cc856001612fce565b815181106124dc576124dc612e83565b016020015160f81c60000361259b5760028160ff16101561250d5750506040805160208101909152600081526111ab565b60008561251b866002612fce565b8151811061252b5761252b612e83565b016020015160f81c9050612540600283613881565b60ff168114158061255e57508060201415801561255e575080601414155b1561257c5760405180602001604052806000815250925050506111ab565b61259261258a866003612fce565b8790836123a9565b925050506111ab565b60006125a786866122fb565b90507fffffff000000000000000000000000000000000000000000000000000000000081167f1976a90000000000000000000000000000000000000000000000000000000000036126bb57856125fe866003612fce565b8151811061260e5761260e612e83565b60209101015160f81c6014141580612686575061264160026126308688612fce565b61263a9190612e5c565b87906122fb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f88ac00000000000000000000000000000000000000000000000000000000000014155b156126a45760405180602001604052806000815250925050506111ab565b6125926126b2866004612fce565b879060146123a9565b7fffffff000000000000000000000000000000000000000000000000000000000081167f17a914000000000000000000000000000000000000000000000000000000000003612762578560016127118688612fce565b61271b9190612e5c565b8151811061272b5761272b612e83565b60209101015160f81c6087146127545760405180602001604052806000815250925050506111ab565b6125926126b2866003612fce565b5050506040805160208101909152600081529392505050565b600080600061278a858561291f565b90508060ff166000036127bf5760008585815181106127ab576127ab612e83565b016020015190935060f81c91506129189050565b836127cb826001613868565b60ff166127d89190612fce565b855110156127ef5760001960009250925050612918565b60008160ff166002036128335761282861281461280d876001612fce565b88906122fb565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061290e565b8160ff166004036128825761287561284f61280d876001612fce565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061290e565b8160ff1660080361290e5761290161289e61280d876001612fce565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600082828151811061293357612933612e83565b016020015160f81c60ff0361294a57506008611639565b82828151811061295c5761295c612e83565b016020015160f81c60fe0361297357506004611639565b82828151811061298557612985612e83565b016020015160f81c60fd0361299c57506002611639565b50600092915050565b6000606082840312156129b757600080fd5b50919050565b6000602082840312156129cf57600080fd5b813567ffffffffffffffff8111156129e657600080fd5b6129f2848285016129a5565b949350505050565b6000608082840312156129b757600080fd5b600080600060408486031215612a2157600080fd5b833567ffffffffffffffff80821115612a3957600080fd5b612a45878388016129fa565b94506020860135915080821115612a5b57600080fd5b818601915086601f830112612a6f57600080fd5b813581811115612a7e57600080fd5b8760208260051b8501011115612a9357600080fd5b6020830194508093505050509250925092565b60008060808385031215612ab957600080fd5b823567ffffffffffffffff811115612ad057600080fd5b612adc858286016129a5565b925050612aec84602085016129a5565b90509250929050565b600060808284031215612b0757600080fd5b6111ab83836129fa565b600060208284031215612b2357600080fd5b813567ffffffffffffffff811115612b3a57600080fd5b8201604081850312156111ab57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160601b031981168114612b7857600080fd5b50565b8035612b8681612b62565b919050565b600060208284031215612b9d57600080fd5b81356111ab81612b62565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612be257612be2612ba8565b60405290565b60405160a0810167ffffffffffffffff81118282101715612be257612be2612ba8565b6040516080810167ffffffffffffffff81118282101715612be257612be2612ba8565b67ffffffffffffffff81168114612b7857600080fd5b8051612b8681612c2e565b63ffffffff81168114612b7857600080fd5b8051612b8681612c4f565b805160068110612b8657600080fd5b60006101208284031215612c8e57600080fd5b612c96612bbe565b8251815260208301516020820152612cb060408401612c44565b6040820152612cc160608401612c61565b6060820152612cd260808401612c61565b6080820152612ce360a08401612c61565b60a0820152612cf460c08401612c61565b60c0820152612d0560e08401612c6c565b60e0820152610100928301519281019290925250919050565b6000808335601e19843603018112612d3557600080fd5b83018035915067ffffffffffffffff821115612d5057600080fd5b6020019150600581901b360382131561291857600080fd5b80516bffffffffffffffffffffffff81168114612b8657600080fd5b600080600080600080600060e0888a031215612d9f57600080fd5b8751612daa81612c2e565b6020890151909750612dbb81612c2e565b6040890151909650612dcc81612c2e565b6060890151909550612ddd81612c2e565b6080890151909450612dee81612c4f565b9250612dfc60a08901612d68565b915060c0880151612e0c81612c4f565b8091505092959891949750929550565b634e487b7160e01b600052601260045260246000fd5b600082612e4157612e41612e1c565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111561163957611639612e46565b600082612e7e57612e7e612e1c565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612eb057600080fd5b83018035915067ffffffffffffffff821115612ecb57600080fd5b60200191503681900382131561291857600080fd5b80516001600160a01b0381168114612b8657600080fd5b600060a08284031215612f0957600080fd5b60405160a0810181811067ffffffffffffffff82111715612f2c57612f2c612ba8565b604052612f3883612ee0565b81526020830151612f4881612c2e565b60208201526040830151612f5b81612c2e565b60408201526060830151612f6e81612c2e565b60608201526080830151612f8181612c4f565b60808201529392505050565b63ffffffff818116838216019080821115612faa57612faa612e46565b5092915050565b63ffffffff828116828216039080821115612faa57612faa612e46565b8082018082111561163957611639612e46565b600060018201612ff357612ff3612e46565b5060010190565b6000808335601e1984360301811261301157600080fd5b83018035915067ffffffffffffffff82111561302c57600080fd5b6020019150600681901b360382131561291857600080fd5b60006040828403121561305657600080fd5b6040516040810181811067ffffffffffffffff8211171561307957613079612ba8565b60405282358152602083013561308e81612c4f565b60208201529392505050565b60008235609e198336030181126130b057600080fd5b9190910192915050565b80356001600160e01b031981168114612b8657600080fd5b600082601f8301126130e357600080fd5b813567ffffffffffffffff808211156130fe576130fe612ba8565b604051601f8301601f19908116603f0116810190828211818310171561312657613126612ba8565b8160405283815286602085880101111561313f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160c01b031981168114612b8657600080fd5b600060a0823603121561318957600080fd5b613191612be8565b823567ffffffffffffffff808211156131a957600080fd5b8185019150608082360312156131be57600080fd5b6131c6612c0b565b6131cf836130ba565b81526020830135828111156131e357600080fd5b6131ef368286016130d2565b60208301525060408301358281111561320757600080fd5b613213368286016130d2565b604083015250613225606084016130ba565b606082015283525061323b90506020840161315f565b602082015261324c60408401612b7b565b604082015261325d60608401612b7b565b606082015261326e608084016130ba565b608082015292915050565b600060c0828403121561328b57600080fd5b60405160c0810181811067ffffffffffffffff821117156132ae576132ae612ba8565b6040526132ba83612ee0565b815260208301516132ca81612c2e565b602082015260408301516132dd81612c4f565b60408201526132ee60608401612ee0565b6060820152608083015161330181612c2e565b608082015260a083015161331481612c4f565b60a08201529392505050565b60008184825b8581101561335857813561333981612b62565b6001600160601b03191683526020928301929190910190600101613326565b509095945050505050565b60008060008060008060008060008060006101608c8e03121561338557600080fd5b8b5161339081612c2e565b60208d0151909b506133a181612c2e565b60408d0151909a506133b281612c4f565b60608d01519099506133c381612c4f565b97506133d160808d01612d68565b965060a08c01516133e181612c4f565b60c08d015190965061ffff811681146133f957600080fd5b945061340760e08d01612c44565b93506134166101008d01612c61565b92506134256101208d01612d68565b91506134346101408d01612c61565b90509295989b509295989b9093969950565b60006020828403121561345857600080fd5b81356111ab81612c4f565b60006080828403121561347557600080fd5b6040516080810181811067ffffffffffffffff8211171561349857613498612ba8565b60405282516134a681612b62565b815260208301516134b681612c2e565b602082015260408301516134c981612c4f565b60408201526060830151600481106134e057600080fd5b60608201529392505050565b6000806000806080858703121561350257600080fd5b845161350d81612c2e565b602086015190945061351e81612c2e565b604086015190935061352f81612c2e565b606086015190925061354081612c4f565b939692955090935050565b6000815160005b8181101561356c5760208185018101518683015201613552565b50600093019283525090919050565b60006001600160e01b031980871683526135a161359b600485018861354b565b8661354b565b9316835250506004019392505050565b600560fa1b8152606086901b6001600160601b0319166001820152607560f81b60158201527f080000000000000000000000000000000000000000000000000000000000000060168201526001600160c01b031985166017820152607560f81b601f820152600061368561367861364f602085015b7f7600000000000000000000000000000000000000000000000000000000000000815260010190565b7fa900000000000000000000000000000000000000000000000000000000000000815260010190565b600560fa1b815260010190565b6001600160601b0319861681527f870000000000000000000000000000000000000000000000000000000000000060148201527f6300000000000000000000000000000000000000000000000000000000000000601582015261374461367861364f61362661371b601686015b7fac00000000000000000000000000000000000000000000000000000000000000815260010190565b7f6700000000000000000000000000000000000000000000000000000000000000815260010190565b6001600160601b0319861681527f880000000000000000000000000000000000000000000000000000000000000060148201527f040000000000000000000000000000000000000000000000000000000000000060158201529050601681016001600160e01b0319851681527fb1000000000000000000000000000000000000000000000000000000000000006004820152607560f81b6005820152905061381a6137f1600683016136f2565b7f6800000000000000000000000000000000000000000000000000000000000000815260010190565b98975050505050505050565b60006111ab828461354b565b60006020828403121561384457600080fd5b5051919050565b60006020828403121561385d57600080fd5b81356111ab81612c2e565b60ff818116838216019081111561163957611639612e46565b60ff828116828216039081111561163957611639612e4656fea2646970667358221220ec178b2cb802bf838acb6b6dd6dfea73503202a2e8fa40478fdf4416288fb53064736f6c63430008110033",
383
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b337db211610081578063e0276b261161005b578063e0276b261461013c578063e78cea9214610186578063f03a4bc5146101c557600080fd5b80639b337db214610157578063d09520f71461016a578063d6c7fa781461017357600080fd5b80637405d7bf116100b25780637405d7bf1461011f578063765f28f914610132578063996a756b1461013c57600080fd5b80630538ac1b146100d95780630fde6c76146100fc5780636b562cec146100d9575b600080fd5b6100e2611c2081565b60405163ffffffff90911681526020015b60405180910390f35b61010f61010a3660046129bd565b6101d8565b60405190151581526020016100f3565b61010f61012d366004612a0c565b6109ca565b6100e26201518081565b610144601481565b60405161ffff90911681526020016100f3565b61010f610165366004612aa6565b6111b2565b6100e261025881565b61010f610181366004612af5565b61163f565b6101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100f3565b61010f6101d3366004612b11565b611b18565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56102186020860186612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa15801561025e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102829190612c7b565b60e00151600581111561029757610297612b4c565b146102e95760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064015b60405180910390fd5b60006102f86020840184612d1e565b915050806103485760405162461bcd60e51b815260206004820152601d60248201527f526564656d7074696f6e2062656c6f7720746865206d696e2073697a6500000060448201526064016102e0565b60148111156103995760405162461bcd60e51b815260206004820152601f60248201527f526564656d7074696f6e206578636565647320746865206d61782073697a650060448201526064016102e0565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e70ce416040518163ffffffff1660e01b815260040160e060405180830381865afa1580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190612d84565b505094509450505050600085604001351161048b5760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8167ffffffffffffffff16856040013511156104f55760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b6000610505846040880135612e32565b90506000846105188360408a0135612e5c565b6105229190612e6f565b905060008567ffffffffffffffff81111561053f5761053f612ba8565b604051908082528060200260200182016040528015610568578160200160208202803683370190505b50905060005b868110156109bb57600061058560208b018b612d1e565b8381811061059557610595612e83565b90506020028101906105a79190612e99565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120959650909493506105f892508e0190508d612b8b565b60405160200161061c9291909182526001600160601b031916602082015260340190565b60408051808303601f190181529082905280516020909101207f03d952f70000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906303d952f79060240160a060405180830381865afa1580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190612ef7565b9050806080015163ffffffff166000036107355760405162461bcd60e51b815260206004820181905260248201527f4e6f7420612070656e64696e6720726564656d7074696f6e207265717565737460448201526064016102e0565b61025881608001516107479190612f8d565b63ffffffff1642116107c15760405162461bcd60e51b815260206004820152602b60248201527f526564656d7074696f6e2072657175657374206d696e20616765206e6f74206160448201527f636869657665642079657400000000000000000000000000000000000000000060648201526084016102e0565b60008882608001516107d39190612f8d565b90506107e1611c2082612fb1565b63ffffffff16421061085b5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e20726571756573742074696d656f757420736166657460448201527f79206d617267696e206973206e6f74207072657365727665640000000000000060648201526084016102e0565b8661086760018d612e5c565b860361087a576108778982612fce565b90505b826060015167ffffffffffffffff168111156108fe5760405162461bcd60e51b815260206004820152603660248201527f50726f706f736564207472616e73616374696f6e207065722d7265717565737460448201527f2066656520736861726520697320746f6f20686967680000000000000000000060648201526084016102e0565b60005b86811015610983578488828151811061091c5761091c612e83565b6020026020010151036109715760405162461bcd60e51b815260206004820152601260248201527f4475706c6963617465642072657175657374000000000000000000000000000060448201526064016102e0565b8061097b81612fe1565b915050610901565b508387878151811061099757610997612e83565b602002602001018181525050505050505080806109b390612fe1565b91505061056e565b50600198975050505050505050565b600060016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d5610a0a6020880188612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190612c7b565b60e001516005811115610a8957610a89612b4c565b14610ad65760405162461bcd60e51b815260206004820152601b60248201527f57616c6c6574206973206e6f7420696e204c697665207374617465000000000060448201526064016102e0565b6000610ae56020860186612ffa565b905011610b345760405162461bcd60e51b815260206004820152601860248201527f53776565702062656c6f7720746865206d696e2073697a65000000000000000060448201526064016102e0565b6014610b436020860186612ffa565b90501115610b935760405162461bcd60e51b815260206004820152601a60248201527f5377656570206578636565647320746865206d61782073697a6500000000000060448201526064016102e0565b81610ba16020860186612ffa565b905014610c165760405162461bcd60e51b815260206004820152602e60248201527f45616368206465706f736974206b6579206d7573742068617665206d6174636860448201527f696e67206578747261206461746100000000000000000000000000000000000060648201526084016102e0565b610c326040850135610c2b6020870187612ffa565b9050611b83565b600080610c426020870187612ffa565b905067ffffffffffffffff811115610c5c57610c5c612ba8565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b50905060005b610c986020880188612ffa565b90508110156111a3576000610cb06020890189612ffa565b83818110610cc057610cc0612e83565b905060400201803603810190610cd69190613044565b90506000878784818110610cec57610cec612e83565b9050602002810190610cfe919061309a565b610d0790613177565b8251602080850151604051939450600093610d3993920191825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207fb02c43d00000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160c060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190613279565b9050806040015163ffffffff16600003610e525760405162461bcd60e51b815260206004820152601460248201527f4465706f736974206e6f742072657665616c656400000000000000000000000060448201526064016102e0565b611c208160400151610e649190612f8d565b63ffffffff164211610eb85760405162461bcd60e51b815260206004820181905260248201527f4465706f736974206d696e20616765206e6f742061636869657665642079657460448201526064016102e0565b60a081015163ffffffff1615610f105760405162461bcd60e51b815260206004820152601560248201527f4465706f73697420616c7265616479207377657074000000000000000000000060448201526064016102e0565b610f1f84826000015185611d0a565b608083015160e881901c62ff00ff1663ff00ff0060d89290921c9190911617601081811c91901b17610f546201518082612fb1565b63ffffffff164210610fce5760405162461bcd60e51b815260206004820152602d60248201527f4465706f73697420726566756e6420736166657479206d617267696e2069732060448201527f6e6f74207072657365727665640000000000000000000000000000000000000060648201526084016102e0565b610fdb60208d018d612b8b565b6bffffffffffffffffffffffff191684604001516bffffffffffffffffffffffff1916146110715760405162461bcd60e51b815260206004820152602660248201527f4465706f73697420636f6e74726f6c6c656420627920646966666572656e742060448201527f77616c6c6574000000000000000000000000000000000000000000000000000060648201526084016102e0565b8560000361108157816060015197505b876001600160a01b031682606001516001600160a01b0316146110e65760405162461bcd60e51b815260206004820152601f60248201527f4465706f736974207461726765747320646966666572656e74207661756c740060448201526064016102e0565b60005b8681101561116b578388828151811061110457611104612e83565b6020026020010151036111595760405162461bcd60e51b815260206004820152601260248201527f4475706c696361746564206465706f736974000000000000000000000000000060448201526064016102e0565b8061116381612fe1565b9150506110e9565b508287878151811061117f5761117f612e83565b6020026020010181815250505050505050808061119b90612fe1565b915050610c8b565b506001925050505b9392505050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d56111f16020870187612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b9190612c7b565b905060028160e00151600581111561127557611275612b4c565b146112e85760405162461bcd60e51b815260206004820152602960248201527f536f757263652077616c6c6574206973206e6f7420696e204d6f76696e67467560448201527f6e6473207374617465000000000000000000000000000000000000000000000060648201526084016102e0565b6101008101516113605760405162461bcd60e51b815260206004820152602a60248201527f5461726765742077616c6c65747320636f6d6d69746d656e74206973206e6f7460448201527f207375626d69747465640000000000000000000000000000000000000000000060648201526084016102e0565b61136d6020850185612d1e565b60405160200161137e929190613320565b604051602081830303815290604052805190602001208161010001511461140d5760405162461bcd60e51b815260206004820152603a60248201527f5461726765742077616c6c65747320646f206e6f74206d61746368207461726760448201527f65742077616c6c65747320636f6d6d69746d656e74206861736800000000000060648201526084016102e0565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa15801561146f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114939190613363565b5050505050505050509150915060006114b0846020015187611f5e565b90508167ffffffffffffffff168167ffffffffffffffff1610156115625760405162461bcd60e51b815260206004820152604260248201527f536f757263652077616c6c6574204254432062616c616e63652069732062656c60448201527f6f7720746865206d6f76696e672066756e64732064757374207468726573686f60648201527f6c64000000000000000000000000000000000000000000000000000000000000608482015260a4016102e0565b60008760400135116115c65760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8267ffffffffffffffff16876040013511156116305760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b60019450505050505b92915050565b6000806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e65e19d561167e6020860186612b8b565b6040516001600160e01b031960e084901b1681526001600160601b0319909116600482015260240161012060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190612c7b565b905060018160e00151600581111561170257611702612b4c565b1480611723575060028160e00151600581111561172157611721612b4c565b145b6117955760405162461bcd60e51b815260206004820152603160248201527f536f757263652077616c6c6574206973206e6f7420696e204c697665206f722060448201527f4d6f76696e6746756e647320737461746500000000000000000000000000000060648201526084016102e0565b600060208401356117ac6060860160408701613446565b6040516020016117d392919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f190181529082905280516020909101207ff18cf1b10000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f18cf1b190602401608060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190613463565b90506001816060015160038111156118aa576118aa612b4c565b1461191d5760405162461bcd60e51b815260206004820152602560248201527f53776565702072657175657374206973206e6f7420696e2050656e64696e672060448201527f737461746500000000000000000000000000000000000000000000000000000060648201526084016102e0565b61192a6020860186612b8b565b81516001600160601b03199081169116146119ad5760405162461bcd60e51b815260206004820152602b60248201527f5377656570207265717565737420646f6573206e6f742062656c6f6e6720746f60448201527f207468652077616c6c657400000000000000000000000000000000000000000060648201526084016102e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be05abe36040518163ffffffff1660e01b815260040161016060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190613363565b5050509750505050505050506000866060013511611aa25760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b8067ffffffffffffffff1686606001351115611b0c5760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b50600195945050505050565b6000611b2f611b2a6020840184612e99565b612039565b611b7b5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420612076616c696420686561727462656174206d65737361676500000060448201526064016102e0565b506001919050565b60008211611be35760405162461bcd60e51b815260206004820152602760248201527f50726f706f736564207472616e73616374696f6e206665652063616e6e6f74206044820152666265207a65726f60c81b60648201526084016102e0565b6000611bef8284612e32565b9050600082611bfe8386612e5c565b611c089190612e6f565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c42b64d06040518163ffffffff1660e01b8152600401608060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e91906134ec565b5092505067ffffffffffffffff82169050611ca98484612fce565b1115611d035760405162461bcd60e51b8152602060048201526024808201527f50726f706f736564207472616e73616374696f6e2066656520697320746f6f206044820152630d0d2ced60e31b60648201526084016102e0565b5050505050565b805180516020808301516040808501516060909501519051600095611d4c95611d389590949391920161357b565b6040516020818303038152906040526120b1565b84519091508114611dc55760405162461bcd60e51b815260206004820152602960248201527f457874726120696e666f2066756e64696e67207478206861736820646f65732060448201527f6e6f74206d61746368000000000000000000000000000000000000000000000060648201526084016102e0565b6000838360200151846040015185606001518660800151604051602001611df09594939291906135b1565b60405160208183030381529060405290506000611e28866020015163ffffffff168560000151604001516120d890919063ffffffff16565b90506000611e35826122ba565b905080516014148015611e6d5750611e4c836122d4565b6001600160601b031916611e618260006122fb565b6001600160601b031916145b15611e7b5750505050505050565b80516020148015611ee25750600283604051611e979190613826565b602060405180830381855afa158015611eb4573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611ed79190613832565b611ee08261230a565b145b15611ef05750505050505050565b60405162461bcd60e51b815260206004820152602f60248201527f457874726120696e666f2066756e64696e67206f75747075742073637269707460448201527f20646f6573206e6f74206d61746368000000000000000000000000000000000060648201526084016102e0565b6000821561163957828235611f796040850160208601613446565b611f89606086016040870161384b565b604051602001611fc69392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146120295760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f206461746100000060448201526064016102e0565b6111ab606083016040840161384b565b60006010821461204b57506000611639565b61208f600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506122fb9050565b6001600160c01b0319908116146120a857506000611639565b50600192915050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60606000806120e685612325565b9092509050600182016121615760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016102e0565b8084106121b05760405162461bcd60e51b815260206004820152601160248201527f566f75742072656164206f76657272756e00000000000000000000000000000060448201526064016102e0565b6000806121be846001612fce565b905060005b86811015612246576121d5888361233c565b925060001983036122285760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102e0565b6122328383612fce565b91508061223e81612fe1565b9150506121c3565b50612251878261233c565b915060001982036122a45760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b657900000000000060448201526064016102e0565b6122af8782846123a9565b979650505050505050565b60606116398260088085516122cf9190612e5c565b612476565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b60006111ab8383016020015190565b6000815160000361231d57506000919050565b506020015190565b60008061233383600061277b565b91509150915091565b6000612349826009612fce565b8351101561235a5750600019611639565b6000806123718561236c866008612fce565b61277b565b90925090506001820161238a5760001992505050611639565b80612396836009612fce565b6123a09190612fce565b95945050505050565b6060816000036123c857506040805160208101909152600081526111ab565b60006123d48385612fce565b905083811180156123e6575080855110155b6124325760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016102e0565b604051915082604083010160405282825283850182038460208701018481015b8082101561246b57815183830152602082019150612452565b505050509392505050565b6060600084848151811061248c5761248c612e83565b016020015160f81c9050826124a2826001613868565b60ff16146124c05750506040805160208101909152600081526111ab565b846124cc856001612fce565b815181106124dc576124dc612e83565b016020015160f81c60000361259b5760028160ff16101561250d5750506040805160208101909152600081526111ab565b60008561251b866002612fce565b8151811061252b5761252b612e83565b016020015160f81c9050612540600283613881565b60ff168114158061255e57508060201415801561255e575080601414155b1561257c5760405180602001604052806000815250925050506111ab565b61259261258a866003612fce565b8790836123a9565b925050506111ab565b60006125a786866122fb565b90507fffffff000000000000000000000000000000000000000000000000000000000081167f1976a90000000000000000000000000000000000000000000000000000000000036126bb57856125fe866003612fce565b8151811061260e5761260e612e83565b60209101015160f81c6014141580612686575061264160026126308688612fce565b61263a9190612e5c565b87906122fb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f88ac00000000000000000000000000000000000000000000000000000000000014155b156126a45760405180602001604052806000815250925050506111ab565b6125926126b2866004612fce565b879060146123a9565b7fffffff000000000000000000000000000000000000000000000000000000000081167f17a914000000000000000000000000000000000000000000000000000000000003612762578560016127118688612fce565b61271b9190612e5c565b8151811061272b5761272b612e83565b60209101015160f81c6087146127545760405180602001604052806000815250925050506111ab565b6125926126b2866003612fce565b5050506040805160208101909152600081529392505050565b600080600061278a858561291f565b90508060ff166000036127bf5760008585815181106127ab576127ab612e83565b016020015190935060f81c91506129189050565b836127cb826001613868565b60ff166127d89190612fce565b855110156127ef5760001960009250925050612918565b60008160ff166002036128335761282861281461280d876001612fce565b88906122fb565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061290e565b8160ff166004036128825761287561284f61280d876001612fce565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061290e565b8160ff1660080361290e5761290161289e61280d876001612fce565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600082828151811061293357612933612e83565b016020015160f81c60ff0361294a57506008611639565b82828151811061295c5761295c612e83565b016020015160f81c60fe0361297357506004611639565b82828151811061298557612985612e83565b016020015160f81c60fd0361299c57506002611639565b50600092915050565b6000606082840312156129b757600080fd5b50919050565b6000602082840312156129cf57600080fd5b813567ffffffffffffffff8111156129e657600080fd5b6129f2848285016129a5565b949350505050565b6000608082840312156129b757600080fd5b600080600060408486031215612a2157600080fd5b833567ffffffffffffffff80821115612a3957600080fd5b612a45878388016129fa565b94506020860135915080821115612a5b57600080fd5b818601915086601f830112612a6f57600080fd5b813581811115612a7e57600080fd5b8760208260051b8501011115612a9357600080fd5b6020830194508093505050509250925092565b60008060808385031215612ab957600080fd5b823567ffffffffffffffff811115612ad057600080fd5b612adc858286016129a5565b925050612aec84602085016129a5565b90509250929050565b600060808284031215612b0757600080fd5b6111ab83836129fa565b600060208284031215612b2357600080fd5b813567ffffffffffffffff811115612b3a57600080fd5b8201604081850312156111ab57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160601b031981168114612b7857600080fd5b50565b8035612b8681612b62565b919050565b600060208284031215612b9d57600080fd5b81356111ab81612b62565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612be257612be2612ba8565b60405290565b60405160a0810167ffffffffffffffff81118282101715612be257612be2612ba8565b6040516080810167ffffffffffffffff81118282101715612be257612be2612ba8565b67ffffffffffffffff81168114612b7857600080fd5b8051612b8681612c2e565b63ffffffff81168114612b7857600080fd5b8051612b8681612c4f565b805160068110612b8657600080fd5b60006101208284031215612c8e57600080fd5b612c96612bbe565b8251815260208301516020820152612cb060408401612c44565b6040820152612cc160608401612c61565b6060820152612cd260808401612c61565b6080820152612ce360a08401612c61565b60a0820152612cf460c08401612c61565b60c0820152612d0560e08401612c6c565b60e0820152610100928301519281019290925250919050565b6000808335601e19843603018112612d3557600080fd5b83018035915067ffffffffffffffff821115612d5057600080fd5b6020019150600581901b360382131561291857600080fd5b80516bffffffffffffffffffffffff81168114612b8657600080fd5b600080600080600080600060e0888a031215612d9f57600080fd5b8751612daa81612c2e565b6020890151909750612dbb81612c2e565b6040890151909650612dcc81612c2e565b6060890151909550612ddd81612c2e565b6080890151909450612dee81612c4f565b9250612dfc60a08901612d68565b915060c0880151612e0c81612c4f565b8091505092959891949750929550565b634e487b7160e01b600052601260045260246000fd5b600082612e4157612e41612e1c565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111561163957611639612e46565b600082612e7e57612e7e612e1c565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612eb057600080fd5b83018035915067ffffffffffffffff821115612ecb57600080fd5b60200191503681900382131561291857600080fd5b80516001600160a01b0381168114612b8657600080fd5b600060a08284031215612f0957600080fd5b60405160a0810181811067ffffffffffffffff82111715612f2c57612f2c612ba8565b604052612f3883612ee0565b81526020830151612f4881612c2e565b60208201526040830151612f5b81612c2e565b60408201526060830151612f6e81612c2e565b60608201526080830151612f8181612c4f565b60808201529392505050565b63ffffffff818116838216019080821115612faa57612faa612e46565b5092915050565b63ffffffff828116828216039080821115612faa57612faa612e46565b8082018082111561163957611639612e46565b600060018201612ff357612ff3612e46565b5060010190565b6000808335601e1984360301811261301157600080fd5b83018035915067ffffffffffffffff82111561302c57600080fd5b6020019150600681901b360382131561291857600080fd5b60006040828403121561305657600080fd5b6040516040810181811067ffffffffffffffff8211171561307957613079612ba8565b60405282358152602083013561308e81612c4f565b60208201529392505050565b60008235609e198336030181126130b057600080fd5b9190910192915050565b80356001600160e01b031981168114612b8657600080fd5b600082601f8301126130e357600080fd5b813567ffffffffffffffff808211156130fe576130fe612ba8565b604051601f8301601f19908116603f0116810190828211818310171561312657613126612ba8565b8160405283815286602085880101111561313f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160c01b031981168114612b8657600080fd5b600060a0823603121561318957600080fd5b613191612be8565b823567ffffffffffffffff808211156131a957600080fd5b8185019150608082360312156131be57600080fd5b6131c6612c0b565b6131cf836130ba565b81526020830135828111156131e357600080fd5b6131ef368286016130d2565b60208301525060408301358281111561320757600080fd5b613213368286016130d2565b604083015250613225606084016130ba565b606082015283525061323b90506020840161315f565b602082015261324c60408401612b7b565b604082015261325d60608401612b7b565b606082015261326e608084016130ba565b608082015292915050565b600060c0828403121561328b57600080fd5b60405160c0810181811067ffffffffffffffff821117156132ae576132ae612ba8565b6040526132ba83612ee0565b815260208301516132ca81612c2e565b602082015260408301516132dd81612c4f565b60408201526132ee60608401612ee0565b6060820152608083015161330181612c2e565b608082015260a083015161331481612c4f565b60a08201529392505050565b60008184825b8581101561335857813561333981612b62565b6001600160601b03191683526020928301929190910190600101613326565b509095945050505050565b60008060008060008060008060008060006101608c8e03121561338557600080fd5b8b5161339081612c2e565b60208d0151909b506133a181612c2e565b60408d0151909a506133b281612c4f565b60608d01519099506133c381612c4f565b97506133d160808d01612d68565b965060a08c01516133e181612c4f565b60c08d015190965061ffff811681146133f957600080fd5b945061340760e08d01612c44565b93506134166101008d01612c61565b92506134256101208d01612d68565b91506134346101408d01612c61565b90509295989b509295989b9093969950565b60006020828403121561345857600080fd5b81356111ab81612c4f565b60006080828403121561347557600080fd5b6040516080810181811067ffffffffffffffff8211171561349857613498612ba8565b60405282516134a681612b62565b815260208301516134b681612c2e565b602082015260408301516134c981612c4f565b60408201526060830151600481106134e057600080fd5b60608201529392505050565b6000806000806080858703121561350257600080fd5b845161350d81612c2e565b602086015190945061351e81612c2e565b604086015190935061352f81612c2e565b606086015190925061354081612c4f565b939692955090935050565b6000815160005b8181101561356c5760208185018101518683015201613552565b50600093019283525090919050565b60006001600160e01b031980871683526135a161359b600485018861354b565b8661354b565b9316835250506004019392505050565b600560fa1b8152606086901b6001600160601b0319166001820152607560f81b60158201527f080000000000000000000000000000000000000000000000000000000000000060168201526001600160c01b031985166017820152607560f81b601f820152600061368561367861364f602085015b7f7600000000000000000000000000000000000000000000000000000000000000815260010190565b7fa900000000000000000000000000000000000000000000000000000000000000815260010190565b600560fa1b815260010190565b6001600160601b0319861681527f870000000000000000000000000000000000000000000000000000000000000060148201527f6300000000000000000000000000000000000000000000000000000000000000601582015261374461367861364f61362661371b601686015b7fac00000000000000000000000000000000000000000000000000000000000000815260010190565b7f6700000000000000000000000000000000000000000000000000000000000000815260010190565b6001600160601b0319861681527f880000000000000000000000000000000000000000000000000000000000000060148201527f040000000000000000000000000000000000000000000000000000000000000060158201529050601681016001600160e01b0319851681527fb1000000000000000000000000000000000000000000000000000000000000006004820152607560f81b6005820152905061381a6137f1600683016136f2565b7f6800000000000000000000000000000000000000000000000000000000000000815260010190565b98975050505050505050565b60006111ab828461354b565b60006020828403121561384457600080fd5b5051919050565b60006020828403121561385d57600080fd5b81356111ab81612c2e565b60ff818116838216019081111561163957611639612e46565b60ff828116828216039081111561163957611639612e4656fea2646970667358221220ec178b2cb802bf838acb6b6dd6dfea73503202a2e8fa40478fdf4416288fb53064736f6c63430008110033",
343
384
  "linkReferences": {},
344
385
  "deployedLinkReferences": {}
345
386
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2c5a2fcd0f24ea28d45420a18212094a.json"
3
+ "buildInfo": "../../../build-info/297fd61d15019934ac7616a0750374d7.json"
4
4
  }
@@ -22,6 +22,7 @@ import "./BitcoinTx.sol";
22
22
  import "./Bridge.sol";
23
23
  import "./Deposit.sol";
24
24
  import "./Redemption.sol";
25
+ import "./MovingFunds.sol";
25
26
  import "./Wallets.sol";
26
27
 
27
28
  /// @title Wallet proposal validator.
@@ -104,6 +105,20 @@ contract WalletProposalValidator {
104
105
  uint256 movingFundsTxFee;
105
106
  }
106
107
 
108
+ /// @notice Helper structure representing a moved funds sweep proposal.
109
+ struct MovedFundsSweepProposal {
110
+ // 20-byte public key hash of the wallet.
111
+ bytes20 walletPubKeyHash;
112
+ // 32-byte hash of the moving funds transaction that caused the sweep
113
+ // request to be created.
114
+ bytes32 movingFundsTxHash;
115
+ // Index of the moving funds transaction output that is subject of the
116
+ // sweep request.
117
+ uint32 movingFundsTxOutputIndex;
118
+ // Proposed BTC fee for the entire transaction.
119
+ uint256 movedFundsSweepTxFee;
120
+ }
121
+
107
122
  /// @notice Helper structure representing a heartbeat proposal.
108
123
  struct HeartbeatProposal {
109
124
  // 20-byte public key hash of the target wallet.
@@ -716,6 +731,80 @@ contract WalletProposalValidator {
716
731
  return walletBtcBalance;
717
732
  }
718
733
 
734
+ /// @notice View function encapsulating the main rules of a valid moved
735
+ /// funds sweep proposal. This function is meant to facilitate the
736
+ /// off-chain validation of the incoming proposals. Thanks to it,
737
+ /// most of the work can be done using a single readonly contract
738
+ /// call.
739
+ /// @param proposal The moved funds sweep proposal to validate.
740
+ /// @return True if the proposal is valid. Reverts otherwise.
741
+ /// @dev Requirements:
742
+ /// - The source wallet must be in the Live or MovingFunds state,
743
+ /// - The moved funds sweep request identified by the proposed
744
+ /// transaction hash and output index must be in the Pending state,
745
+ /// - The transaction hash and output index from the proposal must
746
+ /// identify a moved funds sweep request in the Pending state,
747
+ /// - The transaction hash and output index from the proposal must
748
+ /// identify a moved funds sweep request that belongs to the wallet,
749
+ /// - The proposed moved funds sweep transaction fee must be greater
750
+ /// than zero,
751
+ /// - The proposed moved funds sweep transaction fee must not exceed
752
+ /// the maximum total fee allowed for moved funds sweep.
753
+ function validateMovedFundsSweepProposal(
754
+ MovedFundsSweepProposal calldata proposal
755
+ ) external view returns (bool) {
756
+ Wallets.Wallet memory wallet = bridge.wallets(
757
+ proposal.walletPubKeyHash
758
+ );
759
+
760
+ // Make sure the wallet is in Live or MovingFunds state.
761
+ require(
762
+ wallet.state == Wallets.WalletState.Live ||
763
+ wallet.state == Wallets.WalletState.MovingFunds,
764
+ "Source wallet is not in Live or MovingFunds state"
765
+ );
766
+
767
+ // Make sure the moved funds sweep request is valid.
768
+ uint256 sweepRequestKeyUint = uint256(
769
+ keccak256(
770
+ abi.encodePacked(
771
+ proposal.movingFundsTxHash,
772
+ proposal.movingFundsTxOutputIndex
773
+ )
774
+ )
775
+ );
776
+
777
+ MovingFunds.MovedFundsSweepRequest memory sweepRequest = bridge
778
+ .movedFundsSweepRequests(sweepRequestKeyUint);
779
+
780
+ require(
781
+ sweepRequest.state ==
782
+ MovingFunds.MovedFundsSweepRequestState.Pending,
783
+ "Sweep request is not in Pending state"
784
+ );
785
+
786
+ require(
787
+ sweepRequest.walletPubKeyHash == proposal.walletPubKeyHash,
788
+ "Sweep request does not belong to the wallet"
789
+ );
790
+
791
+ // Make sure the proposed fee is valid.
792
+ (, , , , , , , uint64 movedFundsSweepTxMaxTotalFee, , , ) = bridge
793
+ .movingFundsParameters();
794
+
795
+ require(
796
+ proposal.movedFundsSweepTxFee > 0,
797
+ "Proposed transaction fee cannot be zero"
798
+ );
799
+
800
+ require(
801
+ proposal.movedFundsSweepTxFee <= movedFundsSweepTxMaxTotalFee,
802
+ "Proposed transaction fee is too high"
803
+ );
804
+
805
+ return true;
806
+ }
807
+
719
808
  /// @notice View function encapsulating the main rules of a valid heartbeat
720
809
  /// proposal. This function is meant to facilitate the off-chain
721
810
  /// validation of the incoming proposals. Thanks to it, most