From 4e0f00ff2ac20be0cd60b4d5b0350cc283b9ed5c Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Tue, 16 Apr 2024 16:50:09 -0500 Subject: [PATCH] sepolia deploy --- client/src/assets/DAO.json | 123 ++++++++++++++------ client/src/assets/Onboarding.json | 39 +++---- client/src/assets/Proposals.json | 4 +- client/src/assets/Work1.json | 39 +++---- client/src/contract-addresses.json | 8 +- ethereum/.env.example | 1 + ethereum/contract-addresses.json | 8 +- ethereum/contracts/core/Forum.sol | 16 ++- ethereum/contracts/core/ValidationPools.sol | 54 +++++---- ethereum/hardhat.config.js | 4 + ethereum/package.json | 1 + ethereum/scripts/deploy-dao.js | 10 ++ ethereum/scripts/deploy.js | 2 +- ethereum/scripts/util/deploy-contract.js | 4 +- ethereum/test/Forum.js | 116 +++++++++++------- 15 files changed, 274 insertions(+), 155 deletions(-) create mode 100644 ethereum/scripts/deploy-dao.js diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index edc394f..d9b31ab 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", "contractName": "DAO", - "sourceName": "contracts/DAO.sol", + "sourceName": "contracts/core/DAO.sol", "abi": [ { "inputs": [ @@ -201,6 +201,23 @@ "internalType": "string", "name": "contentId", "type": "string" + }, + { + "components": [ + { + "internalType": "int256", + "name": "weightPercent", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "targetPostIndex", + "type": "uint256" + } + ], + "internalType": "struct Citation[]", + "name": "citations", + "type": "tuple[]" } ], "name": "addPost", @@ -294,6 +311,34 @@ "stateMutability": "pure", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolIndex", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "inFavor", + "type": "bool" + } + ], + "name": "delegatedStakeOnValidationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -473,34 +518,16 @@ "internalType": "string", "name": "contentId", "type": "string" + }, + { + "internalType": "uint256", + "name": "reputation", + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "poolIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "inFavor", - "type": "bool" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -523,13 +550,36 @@ "outputs": [ { "internalType": "bool", - "name": "transferred", + "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "inFavor", + "type": "bool" + } + ], + "name": "stakeOnValidationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "symbol", @@ -560,12 +610,12 @@ "inputs": [ { "internalType": "address", - "name": "to", + "name": "", "type": "address" }, { "internalType": "uint256", - "name": "value", + "name": "", "type": "uint256" } ], @@ -577,24 +627,24 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "from", + "name": "", "type": "address" }, { "internalType": "address", - "name": "to", + "name": "", "type": "address" }, { "internalType": "uint256", - "name": "value", + "name": "", "type": "uint256" } ], @@ -606,7 +656,7 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" }, { @@ -647,6 +697,11 @@ "name": "sender", "type": "address" }, + { + "internalType": "uint256", + "name": "minted", + "type": "uint256" + }, { "internalType": "uint256", "name": "stakeCount", @@ -719,8 +774,8 @@ "type": "function" } ], - "bytecode": "0x60806040526040518060400160405280600160ff168152602001600a60ff16815250600c90600262000033929190620000da565b503480156200004157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000bf9190620003bd565b508060049081620000d19190620003bd565b505050620004a4565b826002810192821562000111579160200282015b8281111562000110578251829060ff16905591602001919060010190620000ee565b5b50905062000120919062000124565b5090565b5b808211156200013f57600081600090555060010162000125565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001c557607f821691505b602082108103620001db57620001da6200017d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000206565b62000251868362000206565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200029e62000298620002928462000269565b62000273565b62000269565b9050919050565b6000819050919050565b620002ba836200027d565b620002d2620002c982620002a5565b84845462000213565b825550505050565b600090565b620002e9620002da565b620002f6818484620002af565b505050565b5b818110156200031e5762000312600082620002df565b600181019050620002fc565b5050565b601f8211156200036d576200033781620001e1565b6200034284620001f6565b8101602085101562000352578190505b6200036a6200036185620001f6565b830182620002fb565b50505b505050565b600082821c905092915050565b6000620003926000198460080262000372565b1980831691505092915050565b6000620003ad83836200037f565b9150826002028217905092915050565b620003c88262000143565b67ffffffffffffffff811115620003e457620003e36200014e565b5b620003f08254620001ac565b620003fd82828562000322565b600060209050601f83116001811462000435576000841562000420578287015190505b6200042c85826200039f565b8655506200049c565b601f1984166200044586620001e1565b60005b828110156200046f5784890151825560018201915060208501945060208101905062000448565b868310156200048f57848901516200048b601f8916826200037f565b8355505b6001600288020188555050505b505050505050565b613a0c80620004b46000396000f3fe60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b604051610151919061254f565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c919061260f565b610630565b60405161018e919061266a565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612685565b610653565b6040516101ce94939291906126d0565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f9919061271c565b60405180910390f35b34801561020e57600080fd5b50610217610751565b604051610224919061271c565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612685565b610757565b604051610261919061266a565b60405180910390f35b34801561027657600080fd5b5061027f61114b565b60405161028c919061271c565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612737565b611155565b6040516102c9919061266a565b60405180910390f35b3480156102de57600080fd5b506102e7611184565b6040516102f491906127a6565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f91906127ed565b61118d565b005b34801561033257600080fd5b5061034d60048036038101906103489190612685565b6111b8565b60405161035a9190612840565b60405180910390f35b34801561036f57600080fd5b506103786111eb565b604051610385919061271c565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b0919061285b565b6111f1565b6040516103c2919061271c565b60405180910390f35b6103e560048036038101906103e0919061290f565b611239565b6040516103f2919061271c565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906129e7565b6117bb565b60405161042f919061266a565b60405180910390f35b34801561044457600080fd5b5061044d611846565b60405161045a919061254f565b60405180910390f35b34801561046f57600080fd5b5061048a6004803603810190610485919061285b565b6118d8565b604051610497919061266a565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612685565b6118f8565b6040516104de9b9a99989796959493929190612bb1565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061260f565b611ae4565b60405161051b919061266a565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612c66565b611b07565b604051610558919061271c565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612cfc565b611b8e565b604051610595919061271c565b60405180910390f35b6060600380546105ad90612d8b565b80601f01602080910402602001604051908101604052809291908181526020018280546105d990612d8b565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611ca2565b9050610648818585611caa565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c890612d8b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490612d8b565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b600a5481565b60065481565b6000806007600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600e0160009054906101000a900460ff161515146107e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d990612e08565b60405180910390fd5b600080600080600090505b856004015481101561085e5785600301600082815260200190815260200160002091508160010160009054906101000a900460ff161561083e578160020154846108379190612e57565b9350610851565b81600201548361084e9190612e57565b92505b80806001019150506107ed565b5084600d0154421180610882575061087461114b565b82846108809190612e57565b145b6108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890612efd565b60405180910390fd5b846005016001016000600281106108db576108da612f1d565b5b01546108e561114b565b6108ef9190612f4c565b82846108fb9190612e57565b8660050160010160016002811061091557610914612f1d565b5b01546109219190612f4c565b11610ab95760005b856004015481101561098c57856003016000828152602001908152602001600020915061097f308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611cbc565b8080600101915050610929565b50600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109de93929190612f8e565b60405180910390a184600e0160029054906101000a900460ff1615610aab578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b8152600401610a6695949392919061305e565b6020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa991906130cd565b505b600095505050505050611146565b84600501600301600060028110610ad357610ad2612f1d565b5b01548284610ae19190612e57565b610aeb9190612f4c565b85600501600301600160028110610b0557610b04612f1d565b5b015484610b129190612f4c565b10159550858015610b915750600b60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610c9f578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000600a6000815480929190610bd2906130fa565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d0c93929190612f8e565b60405180910390a1600086610d215782610d23565b835b9050600087610d325784610d34565b835b9050600080600090505b8860040154811015610f6357886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610d86578960050160050154610d89565b60645b90508560010160009054906101000a900460ff1615158b151503610e6f5760008660030160149054906101000a900460ff1680610dd757508a60050160060160009054906101000a900460ff165b9050600081610de7576000610e1a565b606483610df49190613171565b87878a60020154610e059190612f4c565b610e0f9190613171565b610e199190612f4c565b5b9050610e5a308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610e559190612e57565b611cbc565b8085610e669190612e57565b94505050610f55565b8560030160149054906101000a900460ff16610f545760006064826064610e9691906131a2565b8860020154610ea59190612f4c565b610eaf9190613171565b90506000811115610eea57610ee9308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cbc565b5b8a60050160060160009054906101000a900460ff16610f4457600060648c600501600501548960020154610f1e9190612f4c565b610f289190613171565b9050610f343082611ee1565b8085610f409190612e57565b9450505b8084610f509190612e57565b9350505b5b508080600101915050610d3e565b5060008183610f7291906131a2565b90506000811115610fad57610fac308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cbc565b5b60005b600a548110156110765760006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610ffc61114b565b611005836111f1565b8d600c01546110149190612f4c565b61101e9190613171565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611066573d6000803e3d6000fd5b5050508080600101915050610fb0565b5088600e0160029054906101000a900460ff161561113c578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b81526004016110f795949392919061305e565b6020604051808303816000875af1158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a91906130cd565b505b5050505050505050505b919050565b6000600254905090565b600080611160611ca2565b905061116d858285611f63565b611178858585611ff7565b60019150509392505050565b60006009905090565b60006007600085815260200190815260200160002090506111b28133858560006120eb565b50505050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341161127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613248565b60405180910390fd5b60018910156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906132b4565b60405180910390fd5b651cae8c13e00089111561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190613320565b60405180910390fd5b8760016002811061131e5761131d612f1d565b5b6020020135600c60006002811061133857611337612f1d565b5b01546113449190612f4c565b8860006002811061135857611357612f1d565b5b6020020135600c60016002811061137257611371612f1d565b5b015461137e9190612f4c565b10156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b69061338c565b60405180910390fd5b876001600281106113d3576113d2612f1d565b5b6020020135886000600281106113ec576113eb612f1d565b5b60200201351115611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906133f8565b60405180910390fd5b8660016002811061144657611445612f1d565b5b60200201358760006002811061145f5761145e612f1d565b5b602002013511156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613464565b60405180910390fd5b60648611156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906134d0565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a9061353c565b60405180910390fd5b600860008154809291906115a6906130fa565b9190505591506000600760008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261162e929190612462565b508881600501600301906002611645929190612462565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426116899190612e57565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826116c992919061372d565b506116f88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612209565b611736818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461172e9190613171565b6001806120eb565b611775818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461176c9190613171565b600060016120eb565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516117a4919061271c565b60405180910390a150509998505050505050505050565b60006117c78484611ae4565b9050801561183f578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161180c939291906137fd565b600060405180830381600087803b15801561182657600080fd5b505af115801561183a573d6000803e3d6000fd5b505050505b9392505050565b60606004805461185590612d8b565b80601f016020809104026020016040519081016040528092919081815260200182805461188190612d8b565b80156118ce5780601f106118a3576101008083540402835291602001916118ce565b820191906000526020600020905b8154815290600101906020018083116118b157829003601f168201915b5050505050905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611999576020028201915b815481526020019060010190808311611985575b50505050508152602001600382016002806020026040519081016040528092919082600280156119de576020028201915b8154815260200190600101908083116119ca575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611a6190612d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90612d8b565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b505050505090508b565b600080611aef611ca2565b9050611afc818585611ff7565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060066000815480929190611ba3906130fa565b9190505590506000600560008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611c6292919061389a565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611c92919061271c565b60405180910390a1509392505050565b600033905090565b611cb7838383600161228b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0e578060026000828254611d029190612e57565b92505081905550611de1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d9a578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d91939291906137fd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2a5780600260008282540392505081905550611e77565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ed4919061271c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f535760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f4a9190612840565b60405180910390fd5b611f5f82600083611cbc565b5050565b6000611f6f8484611b07565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ff15781811015611fe1578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611fd8939291906137fd565b60405180910390fd5b611ff08484848403600061228b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120695760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016120609190612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120db5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120d29190612840565b60405180910390fd5b6120e6838383611cbc565b505050565b84600d0154421115612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906139b6565b60405180910390fd5b61213d843085611cbc565b6000856004016000815480929190612154906130fa565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122729190612840565b60405180910390fd5b61228760008383611cbc565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122fd5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122f49190612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361236f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016123669190612840565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561245c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612453919061271c565b60405180910390a35b50505050565b8260028101928215612491579160200282015b82811115612490578235825591602001919060010190612475565b5b50905061249e91906124a2565b5090565b5b808211156124bb5760008160009055506001016124a3565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156124f95780820151818401526020810190506124de565b60008484015250505050565b6000601f19601f8301169050919050565b6000612521826124bf565b61252b81856124ca565b935061253b8185602086016124db565b61254481612505565b840191505092915050565b600060208201905081810360008301526125698184612516565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125a68261257b565b9050919050565b6125b68161259b565b81146125c157600080fd5b50565b6000813590506125d3816125ad565b92915050565b6000819050919050565b6125ec816125d9565b81146125f757600080fd5b50565b600081359050612609816125e3565b92915050565b6000806040838503121561262657612625612571565b5b6000612634858286016125c4565b9250506020612645858286016125fa565b9150509250929050565b60008115159050919050565b6126648161264f565b82525050565b600060208201905061267f600083018461265b565b92915050565b60006020828403121561269b5761269a612571565b5b60006126a9848285016125fa565b91505092915050565b6126bb816125d9565b82525050565b6126ca8161259b565b82525050565b60006080820190506126e560008301876126b2565b6126f260208301866126c1565b6126ff60408301856126c1565b81810360608301526127118184612516565b905095945050505050565b600060208201905061273160008301846126b2565b92915050565b6000806000606084860312156127505761274f612571565b5b600061275e868287016125c4565b935050602061276f868287016125c4565b9250506040612780868287016125fa565b9150509250925092565b600060ff82169050919050565b6127a08161278a565b82525050565b60006020820190506127bb6000830184612797565b92915050565b6127ca8161264f565b81146127d557600080fd5b50565b6000813590506127e7816127c1565b92915050565b60008060006060848603121561280657612805612571565b5b6000612814868287016125fa565b9350506020612825868287016125fa565b9250506040612836868287016127d8565b9150509250925092565b600060208201905061285560008301846126c1565b92915050565b60006020828403121561287157612870612571565b5b600061287f848285016125c4565b91505092915050565b600080fd5b6000819050826020600202820111156128a9576128a8612888565b5b92915050565b600080fd5b600080fd5b60008083601f8401126128cf576128ce6128af565b5b8235905067ffffffffffffffff8111156128ec576128eb6128b4565b5b60208301915083600182028301111561290857612907612888565b5b9250929050565b60008060008060008060008060006101408a8c03121561293257612931612571565b5b60006129408c828d016125fa565b99505060206129518c828d016125fa565b98505060406129628c828d0161288d565b97505060806129738c828d0161288d565b96505060c06129848c828d016125fa565b95505060e06129958c828d016127d8565b9450506101006129a78c828d016127d8565b9350506101208a013567ffffffffffffffff8111156129c9576129c8612576565b5b6129d58c828d016128b9565b92509250509295985092959850929598565b600080600060608486031215612a00576129ff612571565b5b6000612a0e868287016125c4565b9350506020612a1f868287016125fa565b9250506040612a30868287016125fa565b9150509250925092565b612a43816125d9565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a758383612a3a565b60208301905092915050565b6000602082019050919050565b612a9781612a49565b612aa18184612a54565b9250612aac82612a5f565b8060005b83811015612add578151612ac48782612a69565b9650612acf83612a81565b925050600181019050612ab0565b505050505050565b612aee8161264f565b82525050565b60e082016000820151612b0a6000850182612a3a565b506020820151612b1d6020850182612a8e565b506040820151612b306060850182612a8e565b506060820151612b4360a0850182612a3a565b506080820151612b5660c0850182612ae5565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612b8382612b5c565b612b8d8185612b67565b9350612b9d8185602086016124db565b612ba681612505565b840191505092915050565b600061022082019050612bc7600083018e6126b2565b612bd4602083018d6126b2565b612be1604083018c6126c1565b612bee606083018b6126b2565b612bfb608083018a612af4565b612c096101608301896126b2565b612c176101808301886126b2565b612c256101a083018761265b565b612c336101c083018661265b565b612c416101e083018561265b565b818103610200830152612c548184612b78565b90509c9b505050505050505050505050565b60008060408385031215612c7d57612c7c612571565b5b6000612c8b858286016125c4565b9250506020612c9c858286016125c4565b9150509250929050565b60008083601f840112612cbc57612cbb6128af565b5b8235905067ffffffffffffffff811115612cd957612cd86128b4565b5b602083019150836001820283011115612cf557612cf4612888565b5b9250929050565b600080600060408486031215612d1557612d14612571565b5b6000612d23868287016125c4565b935050602084013567ffffffffffffffff811115612d4457612d43612576565b5b612d5086828701612ca6565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612da357607f821691505b602082108103612db657612db5612d5c565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612df26018836124ca565b9150612dfd82612dbc565b602082019050919050565b60006020820190508181036000830152612e2181612de5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e62826125d9565b9150612e6d836125d9565b9250828201905080821115612e8557612e84612e28565b5b92915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ee76021836124ca565b9150612ef282612e8b565b604082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f57826125d9565b9150612f62836125d9565b9250828202612f70816125d9565b91508282048414831517612f8757612f86612e28565b5b5092915050565b6000606082019050612fa360008301866126b2565b612fb0602083018561265b565b612fbd604083018461265b565b949350505050565b60008190508160005260206000209050919050565b60008154612fe781612d8b565b612ff18186612b67565b9450600182166000811461300c576001811461302257613055565b60ff198316865281151560200286019350613055565b61302b85612fc5565b60005b8381101561304d5781548189015260018201915060208101905061302e565b808801955050505b50505092915050565b600060a082019050613073600083018861265b565b613080602083018761265b565b61308d60408301866126b2565b61309a60608301856126b2565b81810360808301526130ac8184612fda565b90509695505050505050565b6000815190506130c7816125e3565b92915050565b6000602082840312156130e3576130e2612571565b5b60006130f1848285016130b8565b91505092915050565b6000613105826125d9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361313757613136612e28565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061317c826125d9565b9150613187836125d9565b92508261319757613196613142565b5b828204905092915050565b60006131ad826125d9565b91506131b8836125d9565b92508282039050818111156131d0576131cf612e28565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000613232602b836124ca565b915061323d826131d6565b604082019050919050565b6000602082019050818103600083015261326181613225565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061329e6015836124ca565b91506132a982613268565b602082019050919050565b600060208201905081810360008301526132cd81613291565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b600061330a6014836124ca565b9150613315826132d4565b602082019050919050565b60006020820190508181036000830152613339816132fd565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006133766017836124ca565b915061338182613340565b602082019050919050565b600060208201905081810360008301526133a581613369565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b60006133e2601a836124ca565b91506133ed826133ac565b602082019050919050565b60006020820190508181036000830152613411816133d5565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b600061344e601d836124ca565b915061345982613418565b602082019050919050565b6000602082019050818103600083015261347d81613441565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b60006134ba601e836124ca565b91506134c582613484565b602082019050919050565b600060208201905081810360008301526134e9816134ad565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006135266015836124ca565b9150613531826134f0565b602082019050919050565b6000602082019050818103600083015261355581613519565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135a6565b6135ed86836135a6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061362a613625613620846125d9565b613605565b6125d9565b9050919050565b6000819050919050565b6136448361360f565b61365861365082613631565b8484546135b3565b825550505050565b600090565b61366d613660565b61367881848461363b565b505050565b5b8181101561369c57613691600082613665565b60018101905061367e565b5050565b601f8211156136e1576136b281612fc5565b6136bb84613596565b810160208510156136ca578190505b6136de6136d685613596565b83018261367d565b50505b505050565b600082821c905092915050565b6000613704600019846008026136e6565b1980831691505092915050565b600061371d83836136f3565b9150826002028217905092915050565b613737838361355c565b67ffffffffffffffff8111156137505761374f613567565b5b61375a8254612d8b565b6137658282856136a0565b6000601f8311600181146137945760008415613782578287013590505b61378c8582613711565b8655506137f4565b601f1984166137a286612fc5565b60005b828110156137ca578489013582556001820191506020850194506020810190506137a5565b868310156137e757848901356137e3601f8916826136f3565b8355505b6001600288020188555050505b50505050505050565b600060608201905061381260008301866126c1565b61381f60208301856126b2565b61382c60408301846126b2565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613895576138668161383f565b61386f84613596565b8101602085101561387e578190505b61389261388a85613596565b83018261367d565b50505b505050565b6138a48383613834565b67ffffffffffffffff8111156138bd576138bc613567565b5b6138c78254612d8b565b6138d2828285613854565b6000601f83116001811461390157600084156138ef578287013590505b6138f98582613711565b865550613961565b601f19841661390f8661383f565b60005b8281101561393757848901358255600182019150602085019450602081019050613912565b868310156139545784890135613950601f8916826136f3565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006139a06018836124ca565b91506139ab8261396a565b602082019050919050565b600060208201905081810360008301526139cf81613993565b905091905056fea26469706673582212200d37870e5a6f36bcdbe447977af045d365ded1d2355c4873f228dc0d57ccf99664736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610438578063a230c52414610463578063a2336279146104a0578063a9059cbb146104e7578063dd62ed3e14610524578063ff869240146105615761012a565b80635daf08ca14610326578063642b5bfb1461036357806370a082311461038e5780637fcf6759146103cb57806388380274146103fb5761012a565b806317c18217116100f257806317c182171461022d57806318160ddd1461026a57806323b872dd14610295578063313ce567146102d2578063561b2463146102fd5761012a565b806306fdde031461012f578063095ea7b31461015a5780630b1e7f831461019757806311aee380146101d757806317906c2e14610202575b600080fd5b34801561013b57600080fd5b5061014461059e565b604051610151919061254f565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c919061260f565b610630565b60405161018e919061266a565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612685565b610653565b6040516101ce94939291906126d0565b60405180910390f35b3480156101e357600080fd5b506101ec61074b565b6040516101f9919061271c565b60405180910390f35b34801561020e57600080fd5b50610217610751565b604051610224919061271c565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f9190612685565b610757565b604051610261919061266a565b60405180910390f35b34801561027657600080fd5b5061027f61114b565b60405161028c919061271c565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612737565b611155565b6040516102c9919061266a565b60405180910390f35b3480156102de57600080fd5b506102e7611184565b6040516102f491906127a6565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f91906127ed565b61118d565b005b34801561033257600080fd5b5061034d60048036038101906103489190612685565b6111b8565b60405161035a9190612840565b60405180910390f35b34801561036f57600080fd5b506103786111eb565b604051610385919061271c565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b0919061285b565b6111f1565b6040516103c2919061271c565b60405180910390f35b6103e560048036038101906103e0919061290f565b611239565b6040516103f2919061271c565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906129e7565b6117bb565b60405161042f919061266a565b60405180910390f35b34801561044457600080fd5b5061044d611846565b60405161045a919061254f565b60405180910390f35b34801561046f57600080fd5b5061048a6004803603810190610485919061285b565b6118d8565b604051610497919061266a565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612685565b6118f8565b6040516104de9b9a99989796959493929190612bb1565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061260f565b611ae4565b60405161051b919061266a565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612c66565b611b07565b604051610558919061271c565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612cfc565b611b8e565b604051610595919061271c565b60405180910390f35b6060600380546105ad90612d8b565b80601f01602080910402602001604051908101604052809291908181526020018280546105d990612d8b565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b5050505050905090565b60008061063b611ca2565b9050610648818585611caa565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106c890612d8b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490612d8b565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905084565b600a5481565b60065481565b6000806007600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600e0160009054906101000a900460ff161515146107e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d990612e08565b60405180910390fd5b600080600080600090505b856004015481101561085e5785600301600082815260200190815260200160002091508160010160009054906101000a900460ff161561083e578160020154846108379190612e57565b9350610851565b81600201548361084e9190612e57565b92505b80806001019150506107ed565b5084600d0154421180610882575061087461114b565b82846108809190612e57565b145b6108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890612efd565b60405180910390fd5b846005016001016000600281106108db576108da612f1d565b5b01546108e561114b565b6108ef9190612f4c565b82846108fb9190612e57565b8660050160010160016002811061091557610914612f1d565b5b01546109219190612f4c565b11610ab95760005b856004015481101561098c57856003016000828152602001908152602001600020915061097f308360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020154611cbc565b8080600101915050610929565b50600185600e0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109de93929190612f8e565b60405180910390a184600e0160029054906101000a900460ff1615610aab578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a600f016040518663ffffffff1660e01b8152600401610a6695949392919061305e565b6020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa991906130cd565b505b600095505050505050611146565b84600501600301600060028110610ad357610ad2612f1d565b5b01548284610ae19190612e57565b610aeb9190612f4c565b85600501600301600160028110610b0557610b04612f1d565b5b015484610b129190612f4c565b10159550858015610b915750600b60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610c9f578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000600a6000815480929190610bd2906130fa565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600e0160006101000a81548160ff0219169083151502179055508585600e0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d0c93929190612f8e565b60405180910390a1600086610d215782610d23565b835b9050600087610d325784610d34565b835b9050600080600090505b8860040154811015610f6357886003016000828152602001908152602001600020945060008560030160149054906101000a900460ff16610d86578960050160050154610d89565b60645b90508560010160009054906101000a900460ff1615158b151503610e6f5760008660030160149054906101000a900460ff1680610dd757508a60050160060160009054906101000a900460ff165b9050600081610de7576000610e1a565b606483610df49190613171565b87878a60020154610e059190612f4c565b610e0f9190613171565b610e199190612f4c565b5b9050610e5a308960030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838b60020154610e559190612e57565b611cbc565b8085610e669190612e57565b94505050610f55565b8560030160149054906101000a900460ff16610f545760006064826064610e9691906131a2565b8860020154610ea59190612f4c565b610eaf9190613171565b90506000811115610eea57610ee9308860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cbc565b5b8a60050160060160009054906101000a900460ff16610f4457600060648c600501600501548960020154610f1e9190612f4c565b610f289190613171565b9050610f343082611ee1565b8085610f409190612e57565b9450505b8084610f509190612e57565b9350505b5b508080600101915050610d3e565b5060008183610f7291906131a2565b90506000811115610fad57610fac308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cbc565b5b60005b600a548110156110765760006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610ffc61114b565b611005836111f1565b8d600c01546110149190612f4c565b61101e9190613171565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611066573d6000803e3d6000fd5b5050508080600101915050610fb0565b5088600e0160029054906101000a900460ff161561113c578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58b60018a8a8e600f016040518663ffffffff1660e01b81526004016110f795949392919061305e565b6020604051808303816000875af1158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a91906130cd565b505b5050505050505050505b919050565b6000600254905090565b600080611160611ca2565b905061116d858285611f63565b611178858585611ff7565b60019150509392505050565b60006009905090565b60006007600085815260200190815260200160002090506111b28133858560006120eb565b50505050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341161127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613248565b60405180910390fd5b60018910156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906132b4565b60405180910390fd5b651cae8c13e00089111561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190613320565b60405180910390fd5b8760016002811061131e5761131d612f1d565b5b6020020135600c60006002811061133857611337612f1d565b5b01546113449190612f4c565b8860006002811061135857611357612f1d565b5b6020020135600c60016002811061137257611371612f1d565b5b015461137e9190612f4c565b10156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b69061338c565b60405180910390fd5b876001600281106113d3576113d2612f1d565b5b6020020135886000600281106113ec576113eb612f1d565b5b60200201351115611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906133f8565b60405180910390fd5b8660016002811061144657611445612f1d565b5b60200201358760006002811061145f5761145e612f1d565b5b602002013511156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613464565b60405180910390fd5b60648611156114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906134d0565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a9061353c565b60405180910390fd5b600860008154809291906115a6906130fa565b9190505591506000600760008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600c0181905550898160050160010190600261162e929190612462565b508881600501600301906002611645929190612462565b50878160050160050181905550868160050160060160006101000a81548160ff0219169083151502179055508a81600501600001819055508a426116899190612e57565b81600d01819055508281600001819055508581600e0160026101000a81548160ff021916908315150217905550848482600f0191826116c992919061372d565b506116f88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612209565b611736818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461172e9190613171565b6001806120eb565b611775818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660023461176c9190613171565b600060016120eb565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516117a4919061271c565b60405180910390a150509998505050505050505050565b60006117c78484611ae4565b9050801561183f578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161180c939291906137fd565b600060405180830381600087803b15801561182657600080fd5b505af115801561183a573d6000803e3d6000fd5b505050505b9392505050565b60606004805461185590612d8b565b80601f016020809104026020016040519081016040528092919081815260200182805461188190612d8b565b80156118ce5780601f106118a3576101008083540402835291602001916118ce565b820191906000526020600020905b8154815290600101906020018083116118b157829003601f168201915b5050505050905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611999576020028201915b815481526020019060010190808311611985575b50505050508152602001600382016002806020026040519081016040528092919082600280156119de576020028201915b8154815260200190600101908083116119ca575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600c01549080600d01549080600e0160009054906101000a900460ff169080600e0160019054906101000a900460ff169080600e0160029054906101000a900460ff169080600f018054611a6190612d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90612d8b565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b505050505090508b565b600080611aef611ca2565b9050611afc818585611ff7565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060066000815480929190611ba3906130fa565b9190505590506000600560008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611c6292919061389a565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c82604051611c92919061271c565b60405180910390a1509392505050565b600033905090565b611cb7838383600161228b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0e578060026000828254611d029190612e57565b92505081905550611de1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d9a578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d91939291906137fd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2a5780600260008282540392505081905550611e77565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ed4919061271c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f535760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f4a9190612840565b60405180910390fd5b611f5f82600083611cbc565b5050565b6000611f6f8484611b07565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ff15781811015611fe1578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611fd8939291906137fd565b60405180910390fd5b611ff08484848403600061228b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120695760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016120609190612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120db5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120d29190612840565b60405180910390fd5b6120e6838383611cbc565b505050565b84600d0154421115612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906139b6565b60405180910390fd5b61213d843085611cbc565b6000856004016000815480929190612154906130fa565b91905055905060008660030160008381526020019081526020016000209050858160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010160006101000a81548160ff021916908315150217905550848160020181905550818160000181905550828160030160146101000a81548160ff02191690831515021790555050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122729190612840565b60405180910390fd5b61228760008383611cbc565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122fd5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122f49190612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361236f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016123669190612840565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561245c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612453919061271c565b60405180910390a35b50505050565b8260028101928215612491579160200282015b82811115612490578235825591602001919060010190612475565b5b50905061249e91906124a2565b5090565b5b808211156124bb5760008160009055506001016124a3565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156124f95780820151818401526020810190506124de565b60008484015250505050565b6000601f19601f8301169050919050565b6000612521826124bf565b61252b81856124ca565b935061253b8185602086016124db565b61254481612505565b840191505092915050565b600060208201905081810360008301526125698184612516565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125a68261257b565b9050919050565b6125b68161259b565b81146125c157600080fd5b50565b6000813590506125d3816125ad565b92915050565b6000819050919050565b6125ec816125d9565b81146125f757600080fd5b50565b600081359050612609816125e3565b92915050565b6000806040838503121561262657612625612571565b5b6000612634858286016125c4565b9250506020612645858286016125fa565b9150509250929050565b60008115159050919050565b6126648161264f565b82525050565b600060208201905061267f600083018461265b565b92915050565b60006020828403121561269b5761269a612571565b5b60006126a9848285016125fa565b91505092915050565b6126bb816125d9565b82525050565b6126ca8161259b565b82525050565b60006080820190506126e560008301876126b2565b6126f260208301866126c1565b6126ff60408301856126c1565b81810360608301526127118184612516565b905095945050505050565b600060208201905061273160008301846126b2565b92915050565b6000806000606084860312156127505761274f612571565b5b600061275e868287016125c4565b935050602061276f868287016125c4565b9250506040612780868287016125fa565b9150509250925092565b600060ff82169050919050565b6127a08161278a565b82525050565b60006020820190506127bb6000830184612797565b92915050565b6127ca8161264f565b81146127d557600080fd5b50565b6000813590506127e7816127c1565b92915050565b60008060006060848603121561280657612805612571565b5b6000612814868287016125fa565b9350506020612825868287016125fa565b9250506040612836868287016127d8565b9150509250925092565b600060208201905061285560008301846126c1565b92915050565b60006020828403121561287157612870612571565b5b600061287f848285016125c4565b91505092915050565b600080fd5b6000819050826020600202820111156128a9576128a8612888565b5b92915050565b600080fd5b600080fd5b60008083601f8401126128cf576128ce6128af565b5b8235905067ffffffffffffffff8111156128ec576128eb6128b4565b5b60208301915083600182028301111561290857612907612888565b5b9250929050565b60008060008060008060008060006101408a8c03121561293257612931612571565b5b60006129408c828d016125fa565b99505060206129518c828d016125fa565b98505060406129628c828d0161288d565b97505060806129738c828d0161288d565b96505060c06129848c828d016125fa565b95505060e06129958c828d016127d8565b9450506101006129a78c828d016127d8565b9350506101208a013567ffffffffffffffff8111156129c9576129c8612576565b5b6129d58c828d016128b9565b92509250509295985092959850929598565b600080600060608486031215612a00576129ff612571565b5b6000612a0e868287016125c4565b9350506020612a1f868287016125fa565b9250506040612a30868287016125fa565b9150509250925092565b612a43816125d9565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a758383612a3a565b60208301905092915050565b6000602082019050919050565b612a9781612a49565b612aa18184612a54565b9250612aac82612a5f565b8060005b83811015612add578151612ac48782612a69565b9650612acf83612a81565b925050600181019050612ab0565b505050505050565b612aee8161264f565b82525050565b60e082016000820151612b0a6000850182612a3a565b506020820151612b1d6020850182612a8e565b506040820151612b306060850182612a8e565b506060820151612b4360a0850182612a3a565b506080820151612b5660c0850182612ae5565b50505050565b600081519050919050565b600082825260208201905092915050565b6000612b8382612b5c565b612b8d8185612b67565b9350612b9d8185602086016124db565b612ba681612505565b840191505092915050565b600061022082019050612bc7600083018e6126b2565b612bd4602083018d6126b2565b612be1604083018c6126c1565b612bee606083018b6126b2565b612bfb608083018a612af4565b612c096101608301896126b2565b612c176101808301886126b2565b612c256101a083018761265b565b612c336101c083018661265b565b612c416101e083018561265b565b818103610200830152612c548184612b78565b90509c9b505050505050505050505050565b60008060408385031215612c7d57612c7c612571565b5b6000612c8b858286016125c4565b9250506020612c9c858286016125c4565b9150509250929050565b60008083601f840112612cbc57612cbb6128af565b5b8235905067ffffffffffffffff811115612cd957612cd86128b4565b5b602083019150836001820283011115612cf557612cf4612888565b5b9250929050565b600080600060408486031215612d1557612d14612571565b5b6000612d23868287016125c4565b935050602084013567ffffffffffffffff811115612d4457612d43612576565b5b612d5086828701612ca6565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612da357607f821691505b602082108103612db657612db5612d5c565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612df26018836124ca565b9150612dfd82612dbc565b602082019050919050565b60006020820190508181036000830152612e2181612de5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e62826125d9565b9150612e6d836125d9565b9250828201905080821115612e8557612e84612e28565b5b92915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ee76021836124ca565b9150612ef282612e8b565b604082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f57826125d9565b9150612f62836125d9565b9250828202612f70816125d9565b91508282048414831517612f8757612f86612e28565b5b5092915050565b6000606082019050612fa360008301866126b2565b612fb0602083018561265b565b612fbd604083018461265b565b949350505050565b60008190508160005260206000209050919050565b60008154612fe781612d8b565b612ff18186612b67565b9450600182166000811461300c576001811461302257613055565b60ff198316865281151560200286019350613055565b61302b85612fc5565b60005b8381101561304d5781548189015260018201915060208101905061302e565b808801955050505b50505092915050565b600060a082019050613073600083018861265b565b613080602083018761265b565b61308d60408301866126b2565b61309a60608301856126b2565b81810360808301526130ac8184612fda565b90509695505050505050565b6000815190506130c7816125e3565b92915050565b6000602082840312156130e3576130e2612571565b5b60006130f1848285016130b8565b91505092915050565b6000613105826125d9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361313757613136612e28565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061317c826125d9565b9150613187836125d9565b92508261319757613196613142565b5b828204905092915050565b60006131ad826125d9565b91506131b8836125d9565b92508282039050818111156131d0576131cf612e28565b5b92915050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000613232602b836124ca565b915061323d826131d6565b604082019050919050565b6000602082019050818103600083015261326181613225565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061329e6015836124ca565b91506132a982613268565b602082019050919050565b600060208201905081810360008301526132cd81613291565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b600061330a6014836124ca565b9150613315826132d4565b602082019050919050565b60006020820190508181036000830152613339816132fd565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006133766017836124ca565b915061338182613340565b602082019050919050565b600060208201905081810360008301526133a581613369565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b60006133e2601a836124ca565b91506133ed826133ac565b602082019050919050565b60006020820190508181036000830152613411816133d5565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b600061344e601d836124ca565b915061345982613418565b602082019050919050565b6000602082019050818103600083015261347d81613441565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b60006134ba601e836124ca565b91506134c582613484565b602082019050919050565b600060208201905081810360008301526134e9816134ad565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006135266015836124ca565b9150613531826134f0565b602082019050919050565b6000602082019050818103600083015261355581613519565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135a6565b6135ed86836135a6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061362a613625613620846125d9565b613605565b6125d9565b9050919050565b6000819050919050565b6136448361360f565b61365861365082613631565b8484546135b3565b825550505050565b600090565b61366d613660565b61367881848461363b565b505050565b5b8181101561369c57613691600082613665565b60018101905061367e565b5050565b601f8211156136e1576136b281612fc5565b6136bb84613596565b810160208510156136ca578190505b6136de6136d685613596565b83018261367d565b50505b505050565b600082821c905092915050565b6000613704600019846008026136e6565b1980831691505092915050565b600061371d83836136f3565b9150826002028217905092915050565b613737838361355c565b67ffffffffffffffff8111156137505761374f613567565b5b61375a8254612d8b565b6137658282856136a0565b6000601f8311600181146137945760008415613782578287013590505b61378c8582613711565b8655506137f4565b601f1984166137a286612fc5565b60005b828110156137ca578489013582556001820191506020850194506020810190506137a5565b868310156137e757848901356137e3601f8916826136f3565b8355505b6001600288020188555050505b50505050505050565b600060608201905061381260008301866126c1565b61381f60208301856126b2565b61382c60408301846126b2565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115613895576138668161383f565b61386f84613596565b8101602085101561387e578190505b61389261388a85613596565b83018261367d565b50505b505050565b6138a48383613834565b67ffffffffffffffff8111156138bd576138bc613567565b5b6138c78254612d8b565b6138d2828285613854565b6000601f83116001811461390157600084156138ef578287013590505b6138f98582613711565b865550613961565b601f19841661390f8661383f565b60005b8281101561393757848901358255600182019150602085019450602081019050613912565b868310156139545784890135613950601f8916826136f3565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b60006139a06018836124ca565b91506139ab8261396a565b602082019050919050565b600060208201905081810360008301526139cf81613993565b905091905056fea26469706673582212200d37870e5a6f36bcdbe447977af045d365ded1d2355c4873f228dc0d57ccf99664736f6c63430008180033", + "bytecode": "0x608060405260036008556040518060400160405280600160ff168152602001600a60ff16815250600e90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b61498180620004b96000396000f3fe6080604052600436106101355760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610481578063975762b3146104ac578063a230c524146104d5578063a233627914610512578063a9059cbb1461055a578063dd62ed3e1461059757610135565b80635daf08ca1461036f578063642b5bfb146103ac57806370a08231146103d75780637fcf675914610414578063883802741461044457610135565b806317c18217116100fd57806317c182171461023957806318160ddd1461027657806323b872dd146102a15780632d17c062146102de578063313ce567146103075780634acce5911461033257610135565b806306fdde031461013a578063095ea7b3146101655780630b1e7f83146101a257806311aee380146101e357806317906c2e1461020e575b600080fd5b34801561014657600080fd5b5061014f6105d4565b60405161015c9190612d5d565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612e1d565b610666565b6040516101999190612e78565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612e93565b610689565b6040516101da959493929190612ede565b60405180910390f35b3480156101ef57600080fd5b506101f8610787565b6040516102059190612f38565b60405180910390f35b34801561021a57600080fd5b5061022361078d565b6040516102309190612f38565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612e93565b610793565b60405161026d9190612e78565b60405180910390f35b34801561028257600080fd5b5061028b61123f565b6040516102989190612f38565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190612f53565b611249565b6040516102d59190612e78565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612fd2565b611286565b005b34801561031357600080fd5b5061031c6112af565b6040516103299190613041565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613117565b6112b8565b6040516103669190612f38565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612e93565b611609565b6040516103a391906131ac565b60405180910390f35b3480156103b857600080fd5b506103c161163c565b6040516103ce9190612f38565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f991906131c7565b611642565b60405161040b9190612f38565b60405180910390f35b61042e6004803603810190610429919061326c565b61168a565b60405161043b9190612f38565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613344565b611b74565b6040516104789190612e78565b60405180910390f35b34801561048d57600080fd5b50610496611bfb565b6040516104a39190612d5d565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613397565b611c8d565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906131c7565b611cc2565b6040516105099190612e78565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612e93565b611ce2565b6040516105519c9b9a99989796959493929190613575565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612e1d565b611ed4565b60405161058e9190612e78565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613638565b611f11565b6040516105cb9190612f38565b60405180910390f35b6060600380546105e3906136a7565b80601f016020809104026020016040519081016040528092919081815260200182805461060f906136a7565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600080610671611f98565b905061067e818585611fa0565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106fe906136a7565b80601f016020809104026020016040519081016040528092919081815260200182805461072a906136a7565b80156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b5050505050908060050154905085565b600c5481565b60065481565b6000806009600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600f0160009054906101000a900460ff1615151461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613724565b60405180910390fd5b600080600080600090505b856005015481101561089a5785600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561087a578160020154846108739190613773565b935061088d565b81600201548361088a9190613773565b92505b8080600101915050610829565b50600285600301546108ac91906137d6565b836108b79190613773565b9250600285600301546108ca91906137d6565b826108d59190613773565b915084600e01544211806108fa57506108ec61123f565b82846108f89190613773565b145b610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090613879565b60405180910390fd5b8460060160010160006002811061095357610952613899565b5b015461095d61123f565b61096791906138c8565b82846109739190613773565b8660060160010160016002811061098d5761098c613899565b5b015461099991906138c8565b11610aca57600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109ef9392919061390a565b60405180910390a184600f0160029054906101000a900460ff1615610abc578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b8152600401610a779594939291906139da565b6020604051808303816000875af1158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190613a49565b505b60009550505050505061123a565b84600601600301600060028110610ae457610ae3613899565b5b01548284610af29190613773565b610afc91906138c8565b85600601600301600160028110610b1657610b15613899565b5b015484610b2391906138c8565b10159550858015610ba25750600d60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610cb0578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b6000600c6000815480929190610be390613a76565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d1d9392919061390a565b60405180910390a1600086610d325782610d34565b835b905060008060005b8860050154811015610e3c5788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610e2f57600060648a600601600501548760020154610d9691906138c8565b610da091906137d6565b90508960060160060160009054906101000a900460ff1615610dfe57610deb8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083611fb2565b8084610df79190613773565b9350610e2d565b610e2c8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d7565b5b505b8080600101915050610d3c565b508815610f8a5760028860030154610e5491906137d6565b82610e5f9190613773565b915060005b8860050154811015610f4a5788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ebc57508460010160009054906101000a900460ff1615158a1515145b15610f3d57600060648a6006016005015486886002015487610ede91906138c8565b610ee891906137d6565b610ef291906138c8565b610efc91906137d6565b90508083610f0a9190613773565b9250610f3b308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fb2565b505b8080600101915050610e64565b5060008183610f599190613abe565b9050610f8489600101548260028c60030154610f7591906137d6565b610f7f9190613773565b612259565b506110a2565b876003015482610f9a9190613773565b915060005b88600501548110156110a05788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ff757508460010160009054906101000a900460ff1615158a1515145b1561109357600060648a6006016005015460028c6003015461101991906137d6565b876110249190613abe565b88600201548761103491906138c8565b61103e91906137d6565b61104891906138c8565b61105291906137d6565b905080836110609190613773565b9250611091308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fb2565b505b8080600101915050610f9f565b505b60005b600c5481101561116b576000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006110f161123f565b6110fa83611642565b8c600d015461110991906138c8565b61111391906137d6565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561115b573d6000803e3d6000fd5b50505080806001019150506110a5565b5087600f0160029054906101000a900460ff1615611231578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b81526004016111ec9594939291906139da565b6020604051808303816000875af115801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f9190613a49565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90613b3e565b60405180910390fd5b60006009600085815260200190815260200160002090506112a98133858561226b565b50505050565b60006009905090565b6000600660008154809291906112cd90613a76565b9190505590506000600560008381526020019081526020016000209050868160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000181905550858582600301918261138c929190613d44565b5060005b848490508110156113fc57816004018585838181106113b2576113b1613899565b5b905060400201908060018154018082558091505060019003906000526020600020906002020160009091909190915081816113ed9190613f68565b50508080600101915050611390565b5060008060005b836004018054905081101561151e57600084600401828154811061142a57611429613899565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613fe8565b60405180910390fd5b60648113156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061407a565b60405180910390fd5b60008113156115015780846114fa919061409a565b9350611510565b808361150d919061409a565b92505b508080600101915050611403565b506064821315611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90614150565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906141e2565b60405180910390fd5b7f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c846040516115f59190612f38565b60405180910390a150505095945050505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614274565b60405180910390fd5b6001891015611712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611709906142e0565b60405180910390fd5b651cae8c13e00089111561175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061434c565b60405180910390fd5b8760016002811061176f5761176e613899565b5b6020020135600e60006002811061178957611788613899565b5b015461179591906138c8565b886000600281106117a9576117a8613899565b5b6020020135600e6001600281106117c3576117c2613899565b5b01546117cf91906138c8565b1015611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906143b8565b60405180910390fd5b8760016002811061182457611823613899565b5b60200201358860006002811061183d5761183c613899565b5b60200201351115611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614424565b60405180910390fd5b8660016002811061189757611896613899565b5b6020020135876000600281106118b0576118af613899565b5b602002013511156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614490565b60405180910390fd5b606486111561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906144fc565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614568565b60405180910390fd5b600a60008154809291906119f790613a76565b9190505591506000600960008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600d01819055508981600601600101906002611a7f929190612c70565b508881600601600301906002611a96929190612c70565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611ada9190613773565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611b1a9291906145d9565b50611b253034612361565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611b5d9190612f38565b60405180910390a150509998505050505050505050565b6000611b81338585611fa0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401611bbe939291906146a9565b600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b50505050600190509392505050565b606060048054611c0a906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c36906136a7565b8015611c835780601f10611c5857610100808354040283529160200191611c83565b820191906000526020600020905b815481529060010190602001808311611c6657829003601f168201915b5050505050905090565b6000600960008681526020019081526020016000209050611caf8433856123e3565b611cbb8185858561226b565b5050505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611d89576020028201915b815481526020019060010190808311611d75575b5050505050815260200160038201600280602002604051908101604052809291908260028015611dce576020028201915b815481526020019060010190808311611dba575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611e51906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d906136a7565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613b3e565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b611fad8383836001612477565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612004578060026000828254611ff89190613773565b925050819055506120d7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612090578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612087939291906146a9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612120578060026000828254039250508190555061216d565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca9190612f38565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122495760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161224091906131ac565b60405180910390fd5b61225582600083611fb2565b5050565b612266828260008061264e565b505050565b83600e01544211156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a99061472c565b60405180910390fd5b60008460050160008154809291906122c990613a76565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d35760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123ca91906131ac565b60405180910390fd5b6123df60008383611fb2565b5050565b60006123ef8484611f11565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124715781811015612461578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401612458939291906146a9565b60405180910390fd5b61247084848484036000612477565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124e95760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016124e091906131ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255b5760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161255291906131ac565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612648578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161263f9190612f38565b60405180910390a35b50505050565b6000600854821061266157839050612aad565b600060056000878152602001908152602001600020905060005b81600401805490508110156127245760008260040182815481106126a2576126a1613899565b5b906000526020600020906002020160000154121561271757612709878360040183815481106126d4576126d3613899565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612ab5565b86612714919061474c565b95505b808060010191505061267b565b5060005b81600401805490508110156127d157600082600401828154811061274f5761274e613899565b5b90600052602060002090600202016000015413156127c4576127b68783600401838154811061278157612780613899565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612ab5565b866127c1919061474c565b95505b8080600101915050612728565b50600085131561282a5761280a308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611fb2565b8481600501600082825461281e9190613773565b92505081905550612aab565b600085826005015461283c919061409a565b12612979578461284b9061478f565b6128788260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b106128ba576128b58160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876128b09061478f565b611fb2565b612950565b6128e78160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b856128f2919061409a565b915061294f8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061294a8460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b611fb2565b5b8461295a9061478f565b81600501600082825461296d9190613abe565b92505081905550612aaa565b848160050154612989919061409a565b915080600501546129bd8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b106129fa576129f58160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360050154611fb2565b612a9f565b612a278160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b8160050154612a369190613abe565b82612a41919061474c565b9150612a9e8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612a998460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b611fb2565b5b600081600501819055505b5b505b949350505050565b60006064856000015185612ac991906147d7565b612ad3919061484f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff856020015103612b53576000811215612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b9061492b565b60405180910390fd5b612b4e30826121d7565b612c67565b6000600760008881526020019081526020016000206000876020015181526020019081526020016000205490508315612bdc576000821215612bb75780612b999061478f565b8213612bae5780612ba99061478f565b612bb0565b815b9150612bdb565b80612bc19061478f565b8212612bd65780612bd19061478f565b612bd8565b815b91505b5b6000612c158760200151848780612c035750600087148015612c02575060008a60000151125b5b600188612c109190613773565b61264e565b90508083612c23919061474c565b925082600760008a81526020019081526020016000206000896020015181526020019081526020016000206000828254612c5d919061409a565b9250508190555050505b95945050505050565b8260028101928215612c9f579160200282015b82811115612c9e578235825591602001919060010190612c83565b5b509050612cac9190612cb0565b5090565b5b80821115612cc9576000816000905550600101612cb1565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d07578082015181840152602081019050612cec565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d2f82612ccd565b612d398185612cd8565b9350612d49818560208601612ce9565b612d5281612d13565b840191505092915050565b60006020820190508181036000830152612d778184612d24565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db482612d89565b9050919050565b612dc481612da9565b8114612dcf57600080fd5b50565b600081359050612de181612dbb565b92915050565b6000819050919050565b612dfa81612de7565b8114612e0557600080fd5b50565b600081359050612e1781612df1565b92915050565b60008060408385031215612e3457612e33612d7f565b5b6000612e4285828601612dd2565b9250506020612e5385828601612e08565b9150509250929050565b60008115159050919050565b612e7281612e5d565b82525050565b6000602082019050612e8d6000830184612e69565b92915050565b600060208284031215612ea957612ea8612d7f565b5b6000612eb784828501612e08565b91505092915050565b612ec981612de7565b82525050565b612ed881612da9565b82525050565b600060a082019050612ef36000830188612ec0565b612f006020830187612ecf565b612f0d6040830186612ecf565b8181036060830152612f1f8185612d24565b9050612f2e6080830184612ec0565b9695505050505050565b6000602082019050612f4d6000830184612ec0565b92915050565b600080600060608486031215612f6c57612f6b612d7f565b5b6000612f7a86828701612dd2565b9350506020612f8b86828701612dd2565b9250506040612f9c86828701612e08565b9150509250925092565b612faf81612e5d565b8114612fba57600080fd5b50565b600081359050612fcc81612fa6565b92915050565b600080600060608486031215612feb57612fea612d7f565b5b6000612ff986828701612e08565b935050602061300a86828701612e08565b925050604061301b86828701612fbd565b9150509250925092565b600060ff82169050919050565b61303b81613025565b82525050565b60006020820190506130566000830184613032565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130815761308061305c565b5b8235905067ffffffffffffffff81111561309e5761309d613061565b5b6020830191508360018202830111156130ba576130b9613066565b5b9250929050565b60008083601f8401126130d7576130d661305c565b5b8235905067ffffffffffffffff8111156130f4576130f3613061565b5b6020830191508360408202830111156131105761310f613066565b5b9250929050565b60008060008060006060868803121561313357613132612d7f565b5b600061314188828901612dd2565b955050602086013567ffffffffffffffff81111561316257613161612d84565b5b61316e8882890161306b565b9450945050604086013567ffffffffffffffff81111561319157613190612d84565b5b61319d888289016130c1565b92509250509295509295909350565b60006020820190506131c16000830184612ecf565b92915050565b6000602082840312156131dd576131dc612d7f565b5b60006131eb84828501612dd2565b91505092915050565b6000819050826020600202820111156132105761320f613066565b5b92915050565b60008083601f84011261322c5761322b61305c565b5b8235905067ffffffffffffffff81111561324957613248613061565b5b60208301915083600182028301111561326557613264613066565b5b9250929050565b60008060008060008060008060006101408a8c03121561328f5761328e612d7f565b5b600061329d8c828d01612e08565b99505060206132ae8c828d01612e08565b98505060406132bf8c828d016131f4565b97505060806132d08c828d016131f4565b96505060c06132e18c828d01612e08565b95505060e06132f28c828d01612fbd565b9450506101006133048c828d01612fbd565b9350506101208a013567ffffffffffffffff81111561332657613325612d84565b5b6133328c828d01613216565b92509250509295985092959850929598565b60008060006060848603121561335d5761335c612d7f565b5b600061336b86828701612dd2565b935050602061337c86828701612e08565b925050604061338d86828701612e08565b9150509250925092565b600080600080608085870312156133b1576133b0612d7f565b5b60006133bf87828801612e08565b94505060206133d087828801612dd2565b93505060406133e187828801612e08565b92505060606133f287828801612fbd565b91505092959194509250565b61340781612de7565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061343983836133fe565b60208301905092915050565b6000602082019050919050565b61345b8161340d565b6134658184613418565b925061347082613423565b8060005b838110156134a1578151613488878261342d565b965061349383613445565b925050600181019050613474565b505050505050565b6134b281612e5d565b82525050565b60e0820160008201516134ce60008501826133fe565b5060208201516134e16020850182613452565b5060408201516134f46060850182613452565b50606082015161350760a08501826133fe565b50608082015161351a60c08501826134a9565b50505050565b600081519050919050565b600082825260208201905092915050565b600061354782613520565b613551818561352b565b9350613561818560208601612ce9565b61356a81612d13565b840191505092915050565b60006102408201905061358b600083018f612ec0565b613598602083018e612ec0565b6135a5604083018d612ecf565b6135b2606083018c612ec0565b6135bf608083018b612ec0565b6135cc60a083018a6134b8565b6135da610180830189612ec0565b6135e86101a0830188612ec0565b6135f66101c0830187612e69565b6136046101e0830186612e69565b613612610200830185612e69565b818103610220830152613625818461353c565b90509d9c50505050505050505050505050565b6000806040838503121561364f5761364e612d7f565b5b600061365d85828601612dd2565b925050602061366e85828601612dd2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136bf57607f821691505b6020821081036136d2576136d1613678565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061370e601883612cd8565b9150613719826136d8565b602082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377e82612de7565b915061378983612de7565b92508282019050808211156137a1576137a0613744565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e182612de7565b91506137ec83612de7565b9250826137fc576137fb6137a7565b5b828204905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613863602183612cd8565b915061386e82613807565b604082019050919050565b6000602082019050818103600083015261389281613856565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006138d382612de7565b91506138de83612de7565b92508282026138ec81612de7565b9150828204841483151761390357613902613744565b5b5092915050565b600060608201905061391f6000830186612ec0565b61392c6020830185612e69565b6139396040830184612e69565b949350505050565b60008190508160005260206000209050919050565b60008154613963816136a7565b61396d818661352b565b94506001821660008114613988576001811461399e576139d1565b60ff1983168652811515602002860193506139d1565b6139a785613941565b60005b838110156139c9578154818901526001820191506020810190506139aa565b808801955050505b50505092915050565b600060a0820190506139ef6000830188612e69565b6139fc6020830187612e69565b613a096040830186612ec0565b613a166060830185612ec0565b8181036080830152613a288184613956565b90509695505050505050565b600081519050613a4381612df1565b92915050565b600060208284031215613a5f57613a5e612d7f565b5b6000613a6d84828501613a34565b91505092915050565b6000613a8182612de7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab357613ab2613744565b5b600182019050919050565b6000613ac982612de7565b9150613ad483612de7565b9250828203905081811115613aec57613aeb613744565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000613b28601b83612cd8565b9150613b3382613af2565b602082019050919050565b60006020820190508181036000830152613b5781613b1b565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613bfa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613bbd565b613c048683613bbd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c41613c3c613c3784612de7565b613c1c565b612de7565b9050919050565b6000819050919050565b613c5b83613c26565b613c6f613c6782613c48565b848454613bca565b825550505050565b600090565b613c84613c77565b613c8f818484613c52565b505050565b5b81811015613cb357613ca8600082613c7c565b600181019050613c95565b5050565b601f821115613cf857613cc981613b98565b613cd284613bad565b81016020851015613ce1578190505b613cf5613ced85613bad565b830182613c94565b50505b505050565b600082821c905092915050565b6000613d1b60001984600802613cfd565b1980831691505092915050565b6000613d348383613d0a565b9150826002028217905092915050565b613d4e8383613b5e565b67ffffffffffffffff811115613d6757613d66613b69565b5b613d7182546136a7565b613d7c828285613cb7565b6000601f831160018114613dab5760008415613d99578287013590505b613da38582613d28565b865550613e0b565b601f198416613db986613b98565b60005b82811015613de157848901358255600182019150602085019450602081019050613dbc565b86831015613dfe5784890135613dfa601f891682613d0a565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b613e2781613e14565b8114613e3257600080fd5b50565b60008135613e4281613e1e565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e8484613e4b565b9350801983169250808416831791505092915050565b6000613eb5613eb0613eab84613e14565b613c1c565b613e14565b9050919050565b6000819050919050565b613ecf82613e9a565b613ee2613edb82613ebc565b8354613e58565b8255505050565b60008135613ef681612df1565b80915050919050565b613f0882613c26565b613f1b613f1482613c48565b8354613e58565b8255505050565b600081016000830180613f3481613e35565b9050613f408184613ec6565b505050600181016020830180613f5581613ee9565b9050613f618184613eff565b5050505050565b613f728282613f22565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd2602483612cd8565b9150613fdd82613f76565b604082019050919050565b6000602082019050818103600083015261400181613fc5565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000614064602383612cd8565b915061406f82614008565b604082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b60006140a582613e14565b91506140b083613e14565b9250828201905082811215600083121683821260008412151617156140d8576140d7613744565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b600061413a602883612cd8565b9150614145826140de565b604082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b60006141cc602983612cd8565b91506141d782614170565b604082019050919050565b600060208201905081810360008301526141fb816141bf565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b600061425e602b83612cd8565b915061426982614202565b604082019050919050565b6000602082019050818103600083015261428d81614251565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b60006142ca601583612cd8565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614336601483612cd8565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006143a2601783612cd8565b91506143ad8261436c565b602082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b600061440e601a83612cd8565b9150614419826143d8565b602082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b600061447a601d83612cd8565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b60006144e6601e83612cd8565b91506144f1826144b0565b602082019050919050565b60006020820190508181036000830152614515816144d9565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000614552601583612cd8565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600082905092915050565b601f8211156145d4576145a581613941565b6145ae84613bad565b810160208510156145bd578190505b6145d16145c985613bad565b830182613c94565b50505b505050565b6145e38383614588565b67ffffffffffffffff8111156145fc576145fb613b69565b5b61460682546136a7565b614611828285614593565b6000601f831160018114614640576000841561462e578287013590505b6146388582613d28565b8655506146a0565b601f19841661464e86613941565b60005b8281101561467657848901358255600182019150602085019450602081019050614651565b86831015614693578489013561468f601f891682613d0a565b8355505b6001600288020188555050505b50505050505050565b60006060820190506146be6000830186612ecf565b6146cb6020830185612ec0565b6146d86040830184612ec0565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614716601883612cd8565b9150614721826146e0565b602082019050919050565b6000602082019050818103600083015261474581614709565b9050919050565b600061475782613e14565b915061476283613e14565b925082820390508181126000841216828213600085121516171561478957614788613744565b5b92915050565b600061479a82613e14565b91507f800000000000000000000000000000000000000000000000000000000000000082036147cc576147cb613744565b5b816000039050919050565b60006147e282613e14565b91506147ed83613e14565b92508282026147fb81613e14565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561483357614832613744565b5b828205841483151761484857614847613744565b5b5092915050565b600061485a82613e14565b915061486583613e14565b925082614875576148746137a7565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156148ae576148ad613744565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000614915602683612cd8565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b905091905056fea2646970667358221220363bc7e3752641f7184c9c229a8aa6f3f9d2c563ebdd11afa7c15979e267ea7c64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106101355760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610481578063975762b3146104ac578063a230c524146104d5578063a233627914610512578063a9059cbb1461055a578063dd62ed3e1461059757610135565b80635daf08ca1461036f578063642b5bfb146103ac57806370a08231146103d75780637fcf675914610414578063883802741461044457610135565b806317c18217116100fd57806317c182171461023957806318160ddd1461027657806323b872dd146102a15780632d17c062146102de578063313ce567146103075780634acce5911461033257610135565b806306fdde031461013a578063095ea7b3146101655780630b1e7f83146101a257806311aee380146101e357806317906c2e1461020e575b600080fd5b34801561014657600080fd5b5061014f6105d4565b60405161015c9190612d5d565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612e1d565b610666565b6040516101999190612e78565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612e93565b610689565b6040516101da959493929190612ede565b60405180910390f35b3480156101ef57600080fd5b506101f8610787565b6040516102059190612f38565b60405180910390f35b34801561021a57600080fd5b5061022361078d565b6040516102309190612f38565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612e93565b610793565b60405161026d9190612e78565b60405180910390f35b34801561028257600080fd5b5061028b61123f565b6040516102989190612f38565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190612f53565b611249565b6040516102d59190612e78565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612fd2565b611286565b005b34801561031357600080fd5b5061031c6112af565b6040516103299190613041565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613117565b6112b8565b6040516103669190612f38565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612e93565b611609565b6040516103a391906131ac565b60405180910390f35b3480156103b857600080fd5b506103c161163c565b6040516103ce9190612f38565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f991906131c7565b611642565b60405161040b9190612f38565b60405180910390f35b61042e6004803603810190610429919061326c565b61168a565b60405161043b9190612f38565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613344565b611b74565b6040516104789190612e78565b60405180910390f35b34801561048d57600080fd5b50610496611bfb565b6040516104a39190612d5d565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613397565b611c8d565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906131c7565b611cc2565b6040516105099190612e78565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612e93565b611ce2565b6040516105519c9b9a99989796959493929190613575565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612e1d565b611ed4565b60405161058e9190612e78565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613638565b611f11565b6040516105cb9190612f38565b60405180910390f35b6060600380546105e3906136a7565b80601f016020809104026020016040519081016040528092919081815260200182805461060f906136a7565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600080610671611f98565b905061067e818585611fa0565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106fe906136a7565b80601f016020809104026020016040519081016040528092919081815260200182805461072a906136a7565b80156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b5050505050908060050154905085565b600c5481565b60065481565b6000806009600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600f0160009054906101000a900460ff1615151461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613724565b60405180910390fd5b600080600080600090505b856005015481101561089a5785600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561087a578160020154846108739190613773565b935061088d565b81600201548361088a9190613773565b92505b8080600101915050610829565b50600285600301546108ac91906137d6565b836108b79190613773565b9250600285600301546108ca91906137d6565b826108d59190613773565b915084600e01544211806108fa57506108ec61123f565b82846108f89190613773565b145b610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090613879565b60405180910390fd5b8460060160010160006002811061095357610952613899565b5b015461095d61123f565b61096791906138c8565b82846109739190613773565b8660060160010160016002811061098d5761098c613899565b5b015461099991906138c8565b11610aca57600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109ef9392919061390a565b60405180910390a184600f0160029054906101000a900460ff1615610abc578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b8152600401610a779594939291906139da565b6020604051808303816000875af1158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190613a49565b505b60009550505050505061123a565b84600601600301600060028110610ae457610ae3613899565b5b01548284610af29190613773565b610afc91906138c8565b85600601600301600160028110610b1657610b15613899565b5b015484610b2391906138c8565b10159550858015610ba25750600d60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610cb0578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b6000600c6000815480929190610be390613a76565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d1d9392919061390a565b60405180910390a1600086610d325782610d34565b835b905060008060005b8860050154811015610e3c5788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610e2f57600060648a600601600501548760020154610d9691906138c8565b610da091906137d6565b90508960060160060160009054906101000a900460ff1615610dfe57610deb8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083611fb2565b8084610df79190613773565b9350610e2d565b610e2c8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d7565b5b505b8080600101915050610d3c565b508815610f8a5760028860030154610e5491906137d6565b82610e5f9190613773565b915060005b8860050154811015610f4a5788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ebc57508460010160009054906101000a900460ff1615158a1515145b15610f3d57600060648a6006016005015486886002015487610ede91906138c8565b610ee891906137d6565b610ef291906138c8565b610efc91906137d6565b90508083610f0a9190613773565b9250610f3b308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fb2565b505b8080600101915050610e64565b5060008183610f599190613abe565b9050610f8489600101548260028c60030154610f7591906137d6565b610f7f9190613773565b612259565b506110a2565b876003015482610f9a9190613773565b915060005b88600501548110156110a05788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ff757508460010160009054906101000a900460ff1615158a1515145b1561109357600060648a6006016005015460028c6003015461101991906137d6565b876110249190613abe565b88600201548761103491906138c8565b61103e91906137d6565b61104891906138c8565b61105291906137d6565b905080836110609190613773565b9250611091308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fb2565b505b8080600101915050610f9f565b505b60005b600c5481101561116b576000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006110f161123f565b6110fa83611642565b8c600d015461110991906138c8565b61111391906137d6565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561115b573d6000803e3d6000fd5b50505080806001019150506110a5565b5087600f0160029054906101000a900460ff1615611231578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b81526004016111ec9594939291906139da565b6020604051808303816000875af115801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f9190613a49565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90613b3e565b60405180910390fd5b60006009600085815260200190815260200160002090506112a98133858561226b565b50505050565b60006009905090565b6000600660008154809291906112cd90613a76565b9190505590506000600560008381526020019081526020016000209050868160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000181905550858582600301918261138c929190613d44565b5060005b848490508110156113fc57816004018585838181106113b2576113b1613899565b5b905060400201908060018154018082558091505060019003906000526020600020906002020160009091909190915081816113ed9190613f68565b50508080600101915050611390565b5060008060005b836004018054905081101561151e57600084600401828154811061142a57611429613899565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613fe8565b60405180910390fd5b60648113156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061407a565b60405180910390fd5b60008113156115015780846114fa919061409a565b9350611510565b808361150d919061409a565b92505b508080600101915050611403565b506064821315611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90614150565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906141e2565b60405180910390fd5b7f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c846040516115f59190612f38565b60405180910390a150505095945050505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034116116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614274565b60405180910390fd5b6001891015611712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611709906142e0565b60405180910390fd5b651cae8c13e00089111561175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061434c565b60405180910390fd5b8760016002811061176f5761176e613899565b5b6020020135600e60006002811061178957611788613899565b5b015461179591906138c8565b886000600281106117a9576117a8613899565b5b6020020135600e6001600281106117c3576117c2613899565b5b01546117cf91906138c8565b1015611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906143b8565b60405180910390fd5b8760016002811061182457611823613899565b5b60200201358860006002811061183d5761183c613899565b5b60200201351115611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614424565b60405180910390fd5b8660016002811061189757611896613899565b5b6020020135876000600281106118b0576118af613899565b5b602002013511156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614490565b60405180910390fd5b606486111561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906144fc565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614568565b60405180910390fd5b600a60008154809291906119f790613a76565b9190505591506000600960008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600d01819055508981600601600101906002611a7f929190612c70565b508881600601600301906002611a96929190612c70565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611ada9190613773565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611b1a9291906145d9565b50611b253034612361565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611b5d9190612f38565b60405180910390a150509998505050505050505050565b6000611b81338585611fa0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401611bbe939291906146a9565b600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b50505050600190509392505050565b606060048054611c0a906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c36906136a7565b8015611c835780601f10611c5857610100808354040283529160200191611c83565b820191906000526020600020905b815481529060010190602001808311611c6657829003601f168201915b5050505050905090565b6000600960008681526020019081526020016000209050611caf8433856123e3565b611cbb8185858561226b565b5050505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611d89576020028201915b815481526020019060010190808311611d75575b5050505050815260200160038201600280602002604051908101604052809291908260028015611dce576020028201915b815481526020019060010190808311611dba575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611e51906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d906136a7565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613b3e565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b611fad8383836001612477565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612004578060026000828254611ff89190613773565b925050819055506120d7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612090578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612087939291906146a9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612120578060026000828254039250508190555061216d565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca9190612f38565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122495760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161224091906131ac565b60405180910390fd5b61225582600083611fb2565b5050565b612266828260008061264e565b505050565b83600e01544211156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a99061472c565b60405180910390fd5b60008460050160008154809291906122c990613a76565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d35760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016123ca91906131ac565b60405180910390fd5b6123df60008383611fb2565b5050565b60006123ef8484611f11565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124715781811015612461578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401612458939291906146a9565b60405180910390fd5b61247084848484036000612477565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124e95760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016124e091906131ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255b5760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161255291906131ac565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612648578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161263f9190612f38565b60405180910390a35b50505050565b6000600854821061266157839050612aad565b600060056000878152602001908152602001600020905060005b81600401805490508110156127245760008260040182815481106126a2576126a1613899565b5b906000526020600020906002020160000154121561271757612709878360040183815481106126d4576126d3613899565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612ab5565b86612714919061474c565b95505b808060010191505061267b565b5060005b81600401805490508110156127d157600082600401828154811061274f5761274e613899565b5b90600052602060002090600202016000015413156127c4576127b68783600401838154811061278157612780613899565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612ab5565b866127c1919061474c565b95505b8080600101915050612728565b50600085131561282a5761280a308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611fb2565b8481600501600082825461281e9190613773565b92505081905550612aab565b600085826005015461283c919061409a565b12612979578461284b9061478f565b6128788260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b106128ba576128b58160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876128b09061478f565b611fb2565b612950565b6128e78160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b856128f2919061409a565b915061294f8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061294a8460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b611fb2565b5b8461295a9061478f565b81600501600082825461296d9190613abe565b92505081905550612aaa565b848160050154612989919061409a565b915080600501546129bd8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b106129fa576129f58160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360050154611fb2565b612a9f565b612a278160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b8160050154612a369190613abe565b82612a41919061474c565b9150612a9e8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612a998460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611642565b611fb2565b5b600081600501819055505b5b505b949350505050565b60006064856000015185612ac991906147d7565b612ad3919061484f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff856020015103612b53576000811215612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b9061492b565b60405180910390fd5b612b4e30826121d7565b612c67565b6000600760008881526020019081526020016000206000876020015181526020019081526020016000205490508315612bdc576000821215612bb75780612b999061478f565b8213612bae5780612ba99061478f565b612bb0565b815b9150612bdb565b80612bc19061478f565b8212612bd65780612bd19061478f565b612bd8565b815b91505b5b6000612c158760200151848780612c035750600087148015612c02575060008a60000151125b5b600188612c109190613773565b61264e565b90508083612c23919061474c565b925082600760008a81526020019081526020016000206000896020015181526020019081526020016000206000828254612c5d919061409a565b9250508190555050505b95945050505050565b8260028101928215612c9f579160200282015b82811115612c9e578235825591602001919060010190612c83565b5b509050612cac9190612cb0565b5090565b5b80821115612cc9576000816000905550600101612cb1565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d07578082015181840152602081019050612cec565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d2f82612ccd565b612d398185612cd8565b9350612d49818560208601612ce9565b612d5281612d13565b840191505092915050565b60006020820190508181036000830152612d778184612d24565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db482612d89565b9050919050565b612dc481612da9565b8114612dcf57600080fd5b50565b600081359050612de181612dbb565b92915050565b6000819050919050565b612dfa81612de7565b8114612e0557600080fd5b50565b600081359050612e1781612df1565b92915050565b60008060408385031215612e3457612e33612d7f565b5b6000612e4285828601612dd2565b9250506020612e5385828601612e08565b9150509250929050565b60008115159050919050565b612e7281612e5d565b82525050565b6000602082019050612e8d6000830184612e69565b92915050565b600060208284031215612ea957612ea8612d7f565b5b6000612eb784828501612e08565b91505092915050565b612ec981612de7565b82525050565b612ed881612da9565b82525050565b600060a082019050612ef36000830188612ec0565b612f006020830187612ecf565b612f0d6040830186612ecf565b8181036060830152612f1f8185612d24565b9050612f2e6080830184612ec0565b9695505050505050565b6000602082019050612f4d6000830184612ec0565b92915050565b600080600060608486031215612f6c57612f6b612d7f565b5b6000612f7a86828701612dd2565b9350506020612f8b86828701612dd2565b9250506040612f9c86828701612e08565b9150509250925092565b612faf81612e5d565b8114612fba57600080fd5b50565b600081359050612fcc81612fa6565b92915050565b600080600060608486031215612feb57612fea612d7f565b5b6000612ff986828701612e08565b935050602061300a86828701612e08565b925050604061301b86828701612fbd565b9150509250925092565b600060ff82169050919050565b61303b81613025565b82525050565b60006020820190506130566000830184613032565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130815761308061305c565b5b8235905067ffffffffffffffff81111561309e5761309d613061565b5b6020830191508360018202830111156130ba576130b9613066565b5b9250929050565b60008083601f8401126130d7576130d661305c565b5b8235905067ffffffffffffffff8111156130f4576130f3613061565b5b6020830191508360408202830111156131105761310f613066565b5b9250929050565b60008060008060006060868803121561313357613132612d7f565b5b600061314188828901612dd2565b955050602086013567ffffffffffffffff81111561316257613161612d84565b5b61316e8882890161306b565b9450945050604086013567ffffffffffffffff81111561319157613190612d84565b5b61319d888289016130c1565b92509250509295509295909350565b60006020820190506131c16000830184612ecf565b92915050565b6000602082840312156131dd576131dc612d7f565b5b60006131eb84828501612dd2565b91505092915050565b6000819050826020600202820111156132105761320f613066565b5b92915050565b60008083601f84011261322c5761322b61305c565b5b8235905067ffffffffffffffff81111561324957613248613061565b5b60208301915083600182028301111561326557613264613066565b5b9250929050565b60008060008060008060008060006101408a8c03121561328f5761328e612d7f565b5b600061329d8c828d01612e08565b99505060206132ae8c828d01612e08565b98505060406132bf8c828d016131f4565b97505060806132d08c828d016131f4565b96505060c06132e18c828d01612e08565b95505060e06132f28c828d01612fbd565b9450506101006133048c828d01612fbd565b9350506101208a013567ffffffffffffffff81111561332657613325612d84565b5b6133328c828d01613216565b92509250509295985092959850929598565b60008060006060848603121561335d5761335c612d7f565b5b600061336b86828701612dd2565b935050602061337c86828701612e08565b925050604061338d86828701612e08565b9150509250925092565b600080600080608085870312156133b1576133b0612d7f565b5b60006133bf87828801612e08565b94505060206133d087828801612dd2565b93505060406133e187828801612e08565b92505060606133f287828801612fbd565b91505092959194509250565b61340781612de7565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061343983836133fe565b60208301905092915050565b6000602082019050919050565b61345b8161340d565b6134658184613418565b925061347082613423565b8060005b838110156134a1578151613488878261342d565b965061349383613445565b925050600181019050613474565b505050505050565b6134b281612e5d565b82525050565b60e0820160008201516134ce60008501826133fe565b5060208201516134e16020850182613452565b5060408201516134f46060850182613452565b50606082015161350760a08501826133fe565b50608082015161351a60c08501826134a9565b50505050565b600081519050919050565b600082825260208201905092915050565b600061354782613520565b613551818561352b565b9350613561818560208601612ce9565b61356a81612d13565b840191505092915050565b60006102408201905061358b600083018f612ec0565b613598602083018e612ec0565b6135a5604083018d612ecf565b6135b2606083018c612ec0565b6135bf608083018b612ec0565b6135cc60a083018a6134b8565b6135da610180830189612ec0565b6135e86101a0830188612ec0565b6135f66101c0830187612e69565b6136046101e0830186612e69565b613612610200830185612e69565b818103610220830152613625818461353c565b90509d9c50505050505050505050505050565b6000806040838503121561364f5761364e612d7f565b5b600061365d85828601612dd2565b925050602061366e85828601612dd2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136bf57607f821691505b6020821081036136d2576136d1613678565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061370e601883612cd8565b9150613719826136d8565b602082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377e82612de7565b915061378983612de7565b92508282019050808211156137a1576137a0613744565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e182612de7565b91506137ec83612de7565b9250826137fc576137fb6137a7565b5b828204905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613863602183612cd8565b915061386e82613807565b604082019050919050565b6000602082019050818103600083015261389281613856565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006138d382612de7565b91506138de83612de7565b92508282026138ec81612de7565b9150828204841483151761390357613902613744565b5b5092915050565b600060608201905061391f6000830186612ec0565b61392c6020830185612e69565b6139396040830184612e69565b949350505050565b60008190508160005260206000209050919050565b60008154613963816136a7565b61396d818661352b565b94506001821660008114613988576001811461399e576139d1565b60ff1983168652811515602002860193506139d1565b6139a785613941565b60005b838110156139c9578154818901526001820191506020810190506139aa565b808801955050505b50505092915050565b600060a0820190506139ef6000830188612e69565b6139fc6020830187612e69565b613a096040830186612ec0565b613a166060830185612ec0565b8181036080830152613a288184613956565b90509695505050505050565b600081519050613a4381612df1565b92915050565b600060208284031215613a5f57613a5e612d7f565b5b6000613a6d84828501613a34565b91505092915050565b6000613a8182612de7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab357613ab2613744565b5b600182019050919050565b6000613ac982612de7565b9150613ad483612de7565b9250828203905081811115613aec57613aeb613744565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000613b28601b83612cd8565b9150613b3382613af2565b602082019050919050565b60006020820190508181036000830152613b5781613b1b565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613bfa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613bbd565b613c048683613bbd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c41613c3c613c3784612de7565b613c1c565b612de7565b9050919050565b6000819050919050565b613c5b83613c26565b613c6f613c6782613c48565b848454613bca565b825550505050565b600090565b613c84613c77565b613c8f818484613c52565b505050565b5b81811015613cb357613ca8600082613c7c565b600181019050613c95565b5050565b601f821115613cf857613cc981613b98565b613cd284613bad565b81016020851015613ce1578190505b613cf5613ced85613bad565b830182613c94565b50505b505050565b600082821c905092915050565b6000613d1b60001984600802613cfd565b1980831691505092915050565b6000613d348383613d0a565b9150826002028217905092915050565b613d4e8383613b5e565b67ffffffffffffffff811115613d6757613d66613b69565b5b613d7182546136a7565b613d7c828285613cb7565b6000601f831160018114613dab5760008415613d99578287013590505b613da38582613d28565b865550613e0b565b601f198416613db986613b98565b60005b82811015613de157848901358255600182019150602085019450602081019050613dbc565b86831015613dfe5784890135613dfa601f891682613d0a565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b613e2781613e14565b8114613e3257600080fd5b50565b60008135613e4281613e1e565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e8484613e4b565b9350801983169250808416831791505092915050565b6000613eb5613eb0613eab84613e14565b613c1c565b613e14565b9050919050565b6000819050919050565b613ecf82613e9a565b613ee2613edb82613ebc565b8354613e58565b8255505050565b60008135613ef681612df1565b80915050919050565b613f0882613c26565b613f1b613f1482613c48565b8354613e58565b8255505050565b600081016000830180613f3481613e35565b9050613f408184613ec6565b505050600181016020830180613f5581613ee9565b9050613f618184613eff565b5050505050565b613f728282613f22565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd2602483612cd8565b9150613fdd82613f76565b604082019050919050565b6000602082019050818103600083015261400181613fc5565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000614064602383612cd8565b915061406f82614008565b604082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b60006140a582613e14565b91506140b083613e14565b9250828201905082811215600083121683821260008412151617156140d8576140d7613744565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b600061413a602883612cd8565b9150614145826140de565b604082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b60006141cc602983612cd8565b91506141d782614170565b604082019050919050565b600060208201905081810360008301526141fb816141bf565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b600061425e602b83612cd8565b915061426982614202565b604082019050919050565b6000602082019050818103600083015261428d81614251565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b60006142ca601583612cd8565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614336601483612cd8565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006143a2601783612cd8565b91506143ad8261436c565b602082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b600061440e601a83612cd8565b9150614419826143d8565b602082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b600061447a601d83612cd8565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b60006144e6601e83612cd8565b91506144f1826144b0565b602082019050919050565b60006020820190508181036000830152614515816144d9565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000614552601583612cd8565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600082905092915050565b601f8211156145d4576145a581613941565b6145ae84613bad565b810160208510156145bd578190505b6145d16145c985613bad565b830182613c94565b50505b505050565b6145e38383614588565b67ffffffffffffffff8111156145fc576145fb613b69565b5b61460682546136a7565b614611828285614593565b6000601f831160018114614640576000841561462e578287013590505b6146388582613d28565b8655506146a0565b601f19841661464e86613941565b60005b8281101561467657848901358255600182019150602085019450602081019050614651565b86831015614693578489013561468f601f891682613d0a565b8355505b6001600288020188555050505b50505050505050565b60006060820190506146be6000830186612ecf565b6146cb6020830185612ec0565b6146d86040830184612ec0565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614716601883612cd8565b9150614721826146e0565b602082019050919050565b6000602082019050818103600083015261474581614709565b9050919050565b600061475782613e14565b915061476283613e14565b925082820390508181126000841216828213600085121516171561478957614788613744565b5b92915050565b600061479a82613e14565b91507f800000000000000000000000000000000000000000000000000000000000000082036147cc576147cb613744565b5b816000039050919050565b60006147e282613e14565b91506147ed83613e14565b92508282026147fb81613e14565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561483357614832613744565b5b828205841483151761484857614847613744565b5b5092915050565b600061485a82613e14565b915061486583613e14565b925082614875576148746137a7565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156148ae576148ad613744565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000614915602683612cd8565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b905091905056fea2646970667358221220363bc7e3752641f7184c9c229a8aa6f3f9d2c563ebdd11afa7c15979e267ea7c64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Onboarding.json b/client/src/assets/Onboarding.json index db65094..0501acc 100644 --- a/client/src/assets/Onboarding.json +++ b/client/src/assets/Onboarding.json @@ -302,19 +302,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeIndex", - "type": "uint256" - } - ], - "name": "reclaimAvailability", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "requestCount", @@ -432,11 +419,6 @@ "internalType": "bool", "name": "assigned", "type": "bool" - }, - { - "internalType": "bool", - "name": "reclaimed", - "type": "bool" } ], "stateMutability": "view", @@ -471,6 +453,23 @@ "internalType": "string", "name": "evidenceContentId", "type": "string" + }, + { + "components": [ + { + "internalType": "int256", + "name": "weightPercent", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "targetPostIndex", + "type": "uint256" + } + ], + "internalType": "struct Citation[]", + "name": "citations", + "type": "tuple[]" } ], "name": "submitWorkEvidence", @@ -479,8 +478,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620031d5380380620031d58339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612f72620002636000396000818161095901528181610d3701528181610e3901528181610f53015281816111400152818161129001526113570152612f726000f3fe6080604052600436106100f35760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e11614610310578063cf3762561461033b578063d5a44f8614610379578063d76b6794146103ba576100f3565b806399ad6c5614610263578063a035b1fe1461027f578063b4e6a1d5146102aa578063b5b20c00146102e7576100f3565b80638150d507116100c65780638150d50714610191578063815a0572146101ba57806381d12c58146101f7578063854b6a4f1461023a576100f3565b80630d0271d6146100f8578063216ed6ad146101145780635b5cf6d41461013d5780635badbe4c14610166575b600080fd5b610112600480360381019061010d9190611921565b6103e5565b005b34801561012057600080fd5b5061013b60048036038101906101369190611a02565b6104d3565b005b34801561014957600080fd5b50610164600480360381019061015f9190611a55565b6105e6565b005b34801561017257600080fd5b5061017b6107a1565b6040516101889190611ac4565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611adf565b6107a7565b005b3480156101c657600080fd5b506101e160048036038101906101dc9190611b62565b610a35565b6040516101ee9190611ac4565b60405180910390f35b34801561020357600080fd5b5061021e60048036038101906102199190611adf565b610ab4565b6040516102319796959493929190611d07565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190611db0565b610c40565b005b61027d60048036038101906102789190611e12565b610fed565b005b34801561028b57600080fd5b50610294611136565b6040516102a19190611ac4565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611e86565b61113c565b6040516102de9190611ac4565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190611f20565b611451565b005b34801561031c57600080fd5b50610325611618565b6040516103329190611ac4565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611adf565b61161e565b604051610370929190611f60565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190611adf565b611642565b6040516103b1959493929190611f89565b60405180910390f35b3480156103c657600080fd5b506103cf6116b2565b6040516103dc9190611ac4565b60405180910390f35b60015434101561042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042190612028565b60405180910390fd5b60006007600081548092919061043f90612077565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104b1826116b8565b816003018190555083838260040191826104cc929190612305565b5050505050565b60008211610516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050d90612421565b60405180910390fd5b60006005600081548092919061052b90612077565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105a09190612441565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105d79190611ac4565b60405180910390a15050505050565b60006006600085815260200190815260200160002090506000600381111561061157610610611be5565b5b8160020160009054906101000a900460ff16600381111561063557610634611be5565b5b14610675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066c906124c1565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612553565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561074a57610749611be5565b5b02179055508383836005019182610762929190612305565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516107929190611ac4565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610847906125e5565b60405180910390fd5b80600201544211610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088d90612677565b60405180910390fd5b8060030160019054906101000a900460ff16156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df906126e3565b60405180910390fd5b8060030160009054906101000a900460ff161561093a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093190612775565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016109b6929190612795565b6020604051808303816000875af11580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f991906127d3565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610a299190611ac4565b60405180910390a15050565b6000808383810190610a479190611adf565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610a9e929190611f60565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610b1c90612128565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4890612128565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b505050505090806005018054610baa90612128565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd690612128565b8015610c235780601f10610bf857610100808354040283529160200191610c23565b820191906000526020600020905b815481529060010190602001808311610c0657829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c6b57610c6a611be5565b5b8160020160009054906101000a900460ff166003811115610c8f57610c8e611be5565b5b14610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc69061284c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610d1257610d11611be5565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610db79291906128f0565b6020604051808303816000875af1158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190612935565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610e2d929190612962565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610e8491906129ba565b8660010154610e9391906129eb565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610eda9190611ac4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610f0c989796959493929190612b5a565b60206040518083038185885af1158015610f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f4f9190612935565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610fb393929190612be1565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50505050505050505050565b60006003600081548092919061100290612077565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d9348787338860018960405160200161107c9190611ac4565b6040516020818303038152906040526040518863ffffffff1660e01b81526004016110ac96959493929190612c6d565b60206040518083038185885af11580156110ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110ef9190612935565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c826040516111269190611ac4565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390612d42565b60405180910390fd5b600083838101906111dd9190611adf565b90506000600660008381526020019081526020016000209050881580611201575087155b1561128c578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461125591906129ba565b9081150290604051600060405180830381858888f19350505050158015611280573d6000803e3d6000fd5b50600192505050611447565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016113109291906128f0565b6020604051808303816000875af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612935565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546113a291906129ba565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016113fb9796959493929190612d88565b60206040518083038185885af1158015611419573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061143e9190612935565b50600093505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612e7f565b60405180910390fd5b8060030160019054906101000a900460ff161561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906126e3565b60405180910390fd5b8060030160009054906101000a900460ff161561159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590612775565b60405180910390fd5b80600201544211156115c35781426115b69190612441565b81600201819055506115dc565b8181600201546115d39190612441565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161160b9190611ac4565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b60006116c2611737565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611729929190611f60565b60405180910390a150919050565b60008060005b6005548110156117be576004600082815260200190815260200160002060030160009054906101000a900460ff166117b157600460008281526020019081526020016000206002015442116117b1576004600082815260200190815260200160002060010154826117ae9190612441565b91505b808060010191505061173d565b5060008111611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990612eeb565b60405180910390fd5b600081446118109190612f0b565b9050600080600090505b6005548110156118ab576004600082815260200190815260200160002060030160009054906101000a900460ff1661189e576004600082815260200190815260200160002060020154421161189e5760046000828152602001908152602001600020600101548261188b9190612441565b91508282111561189d578094506118ab565b5b808060010191505061181a565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118e1576118e06118bc565b5b8235905067ffffffffffffffff8111156118fe576118fd6118c1565b5b60208301915083600182028301111561191a576119196118c6565b5b9250929050565b60008060208385031215611938576119376118b2565b5b600083013567ffffffffffffffff811115611956576119556118b7565b5b611962858286016118cb565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119998261196e565b9050919050565b6119a98161198e565b81146119b457600080fd5b50565b6000813590506119c6816119a0565b92915050565b6000819050919050565b6119df816119cc565b81146119ea57600080fd5b50565b6000813590506119fc816119d6565b92915050565b600080600060608486031215611a1b57611a1a6118b2565b5b6000611a29868287016119b7565b9350506020611a3a868287016119ed565b9250506040611a4b868287016119ed565b9150509250925092565b600080600060408486031215611a6e57611a6d6118b2565b5b6000611a7c868287016119ed565b935050602084013567ffffffffffffffff811115611a9d57611a9c6118b7565b5b611aa9868287016118cb565b92509250509250925092565b611abe816119cc565b82525050565b6000602082019050611ad96000830184611ab5565b92915050565b600060208284031215611af557611af46118b2565b5b6000611b03848285016119ed565b91505092915050565b60008083601f840112611b2257611b216118bc565b5b8235905067ffffffffffffffff811115611b3f57611b3e6118c1565b5b602083019150836001820283011115611b5b57611b5a6118c6565b5b9250929050565b60008060008060608587031215611b7c57611b7b6118b2565b5b6000611b8a878288016119ed565b9450506020611b9b878288016119ed565b935050604085013567ffffffffffffffff811115611bbc57611bbb6118b7565b5b611bc887828801611b0c565b925092505092959194509250565b611bdf8161198e565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611c2557611c24611be5565b5b50565b6000819050611c3682611c14565b919050565b6000611c4682611c28565b9050919050565b611c5681611c3b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c96578082015181840152602081019050611c7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cbe82611c5c565b611cc88185611c67565b9350611cd8818560208601611c78565b611ce181611ca2565b840191505092915050565b60008115159050919050565b611d0181611cec565b82525050565b600060e082019050611d1c600083018a611bd6565b611d296020830189611ab5565b611d366040830188611c4d565b611d436060830187611ab5565b8181036080830152611d558186611cb3565b905081810360a0830152611d698185611cb3565b9050611d7860c0830184611cf8565b98975050505050505050565b611d8d81611cec565b8114611d9857600080fd5b50565b600081359050611daa81611d84565b92915050565b60008060408385031215611dc757611dc66118b2565b5b6000611dd5858286016119ed565b9250506020611de685828601611d9b565b9150509250929050565b600081905082602060030282011115611e0c57611e0b6118c6565b5b92915050565b60008060008060a08587031215611e2c57611e2b6118b2565b5b6000611e3a878288016119ed565b945050602085013567ffffffffffffffff811115611e5b57611e5a6118b7565b5b611e67878288016118cb565b93509350506040611e7a87828801611df0565b91505092959194509250565b60008060008060008060a08789031215611ea357611ea26118b2565b5b6000611eb189828a01611d9b565b9650506020611ec289828a01611d9b565b9550506040611ed389828a016119ed565b9450506060611ee489828a016119ed565b935050608087013567ffffffffffffffff811115611f0557611f046118b7565b5b611f1189828a01611b0c565b92509250509295509295509295565b60008060408385031215611f3757611f366118b2565b5b6000611f45858286016119ed565b9250506020611f56858286016119ed565b9150509250929050565b6000604082019050611f756000830185611ab5565b611f826020830184611ab5565b9392505050565b600060a082019050611f9e6000830188611bd6565b611fab6020830187611ab5565b611fb86040830186611ab5565b611fc56060830185611cf8565b611fd26080830184611cf8565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000612012601083611c67565b915061201d82611fdc565b602082019050919050565b6000602082019050818103600083015261204181612005565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612082826119cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120b4576120b3612048565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061214057607f821691505b602082108103612153576121526120f9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261217e565b6121c5868361217e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006122026121fd6121f8846119cc565b6121dd565b6119cc565b9050919050565b6000819050919050565b61221c836121e7565b61223061222882612209565b84845461218b565b825550505050565b600090565b612245612238565b612250818484612213565b505050565b5b818110156122745761226960008261223d565b600181019050612256565b5050565b601f8211156122b95761228a81612159565b6122938461216e565b810160208510156122a2578190505b6122b66122ae8561216e565b830182612255565b50505b505050565b600082821c905092915050565b60006122dc600019846008026122be565b1980831691505092915050565b60006122f583836122cb565b9150826002028217905092915050565b61230f83836120bf565b67ffffffffffffffff811115612328576123276120ca565b5b6123328254612128565b61233d828285612278565b6000601f83116001811461236c576000841561235a578287013590505b61236485826122e9565b8655506123cc565b601f19841661237a86612159565b60005b828110156123a25784890135825560018201915060208501945060208101905061237d565b868310156123bf57848901356123bb601f8916826122cb565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061240b601183611c67565b9150612416826123d5565b602082019050919050565b6000602082019050818103600083015261243a816123fe565b9050919050565b600061244c826119cc565b9150612457836119cc565b925082820190508082111561246f5761246e612048565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006124ab601883611c67565b91506124b682612475565b602082019050919050565b600060208201905081810360008301526124da8161249e565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061253d603a83611c67565b9150612548826124e1565b604082019050919050565b6000602082019050818103600083015261256c81612530565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006125cf603483611c67565b91506125da82612573565b604082019050919050565b600060208201905081810360008301526125fe816125c2565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000612661602283611c67565b915061266c82612605565b604082019050919050565b6000602082019050818103600083015261269081612654565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006126cd602083611c67565b91506126d882612697565b602082019050919050565b600060208201905081810360008301526126fc816126c0565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061275f602483611c67565b915061276a82612703565b604082019050919050565b6000602082019050818103600083015261278e81612752565b9050919050565b60006040820190506127aa6000830185611bd6565b6127b76020830184611ab5565b9392505050565b6000815190506127cd81611d84565b92915050565b6000602082840312156127e9576127e86118b2565b5b60006127f7848285016127be565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612836602083611c67565b915061284182612800565b602082019050919050565b6000602082019050818103600083015261286581612829565b9050919050565b6000815461287981612128565b6128838186611c67565b9450600182166000811461289e57600181146128b4576128e7565b60ff1983168652811515602002860193506128e7565b6128bd85612159565b60005b838110156128df578154818901526001820191506020810190506128c0565b808801955050505b50505092915050565b60006040820190506129056000830185611bd6565b8181036020830152612917818461286c565b90509392505050565b60008151905061292f816119d6565b92915050565b60006020828403121561294b5761294a6118b2565b5b600061295984828501612920565b91505092915050565b60006040820190506129776000830185611ab5565b6129846020830184611cf8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129c5826119cc565b91506129d0836119cc565b9250826129e0576129df61298b565b5b828204905092915050565b60006129f6826119cc565b9150612a01836119cc565b9250828203905081811115612a1957612a18612048565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b612a48816119cc565b82525050565b6000612a5a8383612a3f565b60208301905092915050565b6000602082019050919050565b612a7c81612a1f565b612a868184612a2a565b9250612a9182612a35565b8060005b83811015612ac2578151612aa98782612a4e565b9650612ab483612a66565b925050600181019050612a95565b505050505050565b6000819050919050565b6000612aef612aea612ae584612aca565b6121dd565b6119cc565b9050919050565b612aff81612ad4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612b2c82612b05565b612b368185612b10565b9350612b46818560208601611c78565b612b4f81611ca2565b840191505092915050565b600061014082019050612b70600083018b611ab5565b612b7d602083018a611ab5565b612b8a6040830189612a73565b612b976080830188612a73565b612ba460c0830187612af6565b612bb160e0830186611cf8565b612bbf610100830185611cf8565b818103610120830152612bd28184612b21565b90509998505050505050505050565b6000606082019050612bf66000830186611ab5565b612c036020830185611ab5565b612c106040830184611cf8565b949350505050565b82818337600083830152505050565b6000612c338385611c67565b9350612c40838584612c18565b612c4983611ca2565b840190509392505050565b82818337505050565b612c6960608383612c54565b5050565b600060e0820190508181036000830152612c8881888a612c27565b9050612c976020830187611bd6565b612ca46040830186612c5d565b612cb160a0830185611cf8565b81810360c0830152612cc38184612b21565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d2c603183611c67565b9150612d3782612cd0565b604082019050919050565b60006020820190508181036000830152612d5b81612d1f565b9050919050565b50565b6000612d72600083612b10565b9150612d7d82612d62565b600082019050919050565b600061014082019050612d9e600083018a611ab5565b612dab6020830189611ab5565b612db86040830188612a73565b612dc56080830187612a73565b612dd260c0830186612af6565b612ddf60e0830185611cf8565b612ded610100830184611cf8565b818103610120830152612dff81612d65565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612e69603383611c67565b9150612e7482612e0d565b604082019050919050565b60006020820190508181036000830152612e9881612e5c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ed5601a83611c67565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b6000612f16826119cc565b9150612f21836119cc565b925082612f3157612f3061298b565b5b82820690509291505056fea2646970667358221220c1a9c502c28e6fa331e1f294c63eb55c51dd87a23a4a31c18c27b73180fd170364736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100f35760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e11614610310578063cf3762561461033b578063d5a44f8614610379578063d76b6794146103ba576100f3565b806399ad6c5614610263578063a035b1fe1461027f578063b4e6a1d5146102aa578063b5b20c00146102e7576100f3565b80638150d507116100c65780638150d50714610191578063815a0572146101ba57806381d12c58146101f7578063854b6a4f1461023a576100f3565b80630d0271d6146100f8578063216ed6ad146101145780635b5cf6d41461013d5780635badbe4c14610166575b600080fd5b610112600480360381019061010d9190611921565b6103e5565b005b34801561012057600080fd5b5061013b60048036038101906101369190611a02565b6104d3565b005b34801561014957600080fd5b50610164600480360381019061015f9190611a55565b6105e6565b005b34801561017257600080fd5b5061017b6107a1565b6040516101889190611ac4565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611adf565b6107a7565b005b3480156101c657600080fd5b506101e160048036038101906101dc9190611b62565b610a35565b6040516101ee9190611ac4565b60405180910390f35b34801561020357600080fd5b5061021e60048036038101906102199190611adf565b610ab4565b6040516102319796959493929190611d07565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190611db0565b610c40565b005b61027d60048036038101906102789190611e12565b610fed565b005b34801561028b57600080fd5b50610294611136565b6040516102a19190611ac4565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611e86565b61113c565b6040516102de9190611ac4565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190611f20565b611451565b005b34801561031c57600080fd5b50610325611618565b6040516103329190611ac4565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611adf565b61161e565b604051610370929190611f60565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190611adf565b611642565b6040516103b1959493929190611f89565b60405180910390f35b3480156103c657600080fd5b506103cf6116b2565b6040516103dc9190611ac4565b60405180910390f35b60015434101561042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042190612028565b60405180910390fd5b60006007600081548092919061043f90612077565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104b1826116b8565b816003018190555083838260040191826104cc929190612305565b5050505050565b60008211610516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050d90612421565b60405180910390fd5b60006005600081548092919061052b90612077565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105a09190612441565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105d79190611ac4565b60405180910390a15050505050565b60006006600085815260200190815260200160002090506000600381111561061157610610611be5565b5b8160020160009054906101000a900460ff16600381111561063557610634611be5565b5b14610675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066c906124c1565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612553565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561074a57610749611be5565b5b02179055508383836005019182610762929190612305565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516107929190611ac4565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610847906125e5565b60405180910390fd5b80600201544211610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088d90612677565b60405180910390fd5b8060030160019054906101000a900460ff16156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df906126e3565b60405180910390fd5b8060030160009054906101000a900460ff161561093a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093190612775565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016109b6929190612795565b6020604051808303816000875af11580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f991906127d3565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610a299190611ac4565b60405180910390a15050565b6000808383810190610a479190611adf565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610a9e929190611f60565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610b1c90612128565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4890612128565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b505050505090806005018054610baa90612128565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd690612128565b8015610c235780601f10610bf857610100808354040283529160200191610c23565b820191906000526020600020905b815481529060010190602001808311610c0657829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c6b57610c6a611be5565b5b8160020160009054906101000a900460ff166003811115610c8f57610c8e611be5565b5b14610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc69061284c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610d1257610d11611be5565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610db79291906128f0565b6020604051808303816000875af1158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190612935565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610e2d929190612962565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610e8491906129ba565b8660010154610e9391906129eb565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610eda9190611ac4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610f0c989796959493929190612b5a565b60206040518083038185885af1158015610f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f4f9190612935565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610fb393929190612be1565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50505050505050505050565b60006003600081548092919061100290612077565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d9348787338860018960405160200161107c9190611ac4565b6040516020818303038152906040526040518863ffffffff1660e01b81526004016110ac96959493929190612c6d565b60206040518083038185885af11580156110ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110ef9190612935565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c826040516111269190611ac4565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390612d42565b60405180910390fd5b600083838101906111dd9190611adf565b90506000600660008381526020019081526020016000209050881580611201575087155b1561128c578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461125591906129ba565b9081150290604051600060405180830381858888f19350505050158015611280573d6000803e3d6000fd5b50600192505050611447565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b81526004016113109291906128f0565b6020604051808303816000875af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612935565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a84600101546113a291906129ba565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016113fb9796959493929190612d88565b60206040518083038185885af1158015611419573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061143e9190612935565b50600093505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612e7f565b60405180910390fd5b8060030160019054906101000a900460ff161561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906126e3565b60405180910390fd5b8060030160009054906101000a900460ff161561159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590612775565b60405180910390fd5b80600201544211156115c35781426115b69190612441565b81600201819055506115dc565b8181600201546115d39190612441565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161160b9190611ac4565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b60006116c2611737565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611729929190611f60565b60405180910390a150919050565b60008060005b6005548110156117be576004600082815260200190815260200160002060030160009054906101000a900460ff166117b157600460008281526020019081526020016000206002015442116117b1576004600082815260200190815260200160002060010154826117ae9190612441565b91505b808060010191505061173d565b5060008111611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990612eeb565b60405180910390fd5b600081446118109190612f0b565b9050600080600090505b6005548110156118ab576004600082815260200190815260200160002060030160009054906101000a900460ff1661189e576004600082815260200190815260200160002060020154421161189e5760046000828152602001908152602001600020600101548261188b9190612441565b91508282111561189d578094506118ab565b5b808060010191505061181a565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118e1576118e06118bc565b5b8235905067ffffffffffffffff8111156118fe576118fd6118c1565b5b60208301915083600182028301111561191a576119196118c6565b5b9250929050565b60008060208385031215611938576119376118b2565b5b600083013567ffffffffffffffff811115611956576119556118b7565b5b611962858286016118cb565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119998261196e565b9050919050565b6119a98161198e565b81146119b457600080fd5b50565b6000813590506119c6816119a0565b92915050565b6000819050919050565b6119df816119cc565b81146119ea57600080fd5b50565b6000813590506119fc816119d6565b92915050565b600080600060608486031215611a1b57611a1a6118b2565b5b6000611a29868287016119b7565b9350506020611a3a868287016119ed565b9250506040611a4b868287016119ed565b9150509250925092565b600080600060408486031215611a6e57611a6d6118b2565b5b6000611a7c868287016119ed565b935050602084013567ffffffffffffffff811115611a9d57611a9c6118b7565b5b611aa9868287016118cb565b92509250509250925092565b611abe816119cc565b82525050565b6000602082019050611ad96000830184611ab5565b92915050565b600060208284031215611af557611af46118b2565b5b6000611b03848285016119ed565b91505092915050565b60008083601f840112611b2257611b216118bc565b5b8235905067ffffffffffffffff811115611b3f57611b3e6118c1565b5b602083019150836001820283011115611b5b57611b5a6118c6565b5b9250929050565b60008060008060608587031215611b7c57611b7b6118b2565b5b6000611b8a878288016119ed565b9450506020611b9b878288016119ed565b935050604085013567ffffffffffffffff811115611bbc57611bbb6118b7565b5b611bc887828801611b0c565b925092505092959194509250565b611bdf8161198e565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611c2557611c24611be5565b5b50565b6000819050611c3682611c14565b919050565b6000611c4682611c28565b9050919050565b611c5681611c3b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c96578082015181840152602081019050611c7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cbe82611c5c565b611cc88185611c67565b9350611cd8818560208601611c78565b611ce181611ca2565b840191505092915050565b60008115159050919050565b611d0181611cec565b82525050565b600060e082019050611d1c600083018a611bd6565b611d296020830189611ab5565b611d366040830188611c4d565b611d436060830187611ab5565b8181036080830152611d558186611cb3565b905081810360a0830152611d698185611cb3565b9050611d7860c0830184611cf8565b98975050505050505050565b611d8d81611cec565b8114611d9857600080fd5b50565b600081359050611daa81611d84565b92915050565b60008060408385031215611dc757611dc66118b2565b5b6000611dd5858286016119ed565b9250506020611de685828601611d9b565b9150509250929050565b600081905082602060030282011115611e0c57611e0b6118c6565b5b92915050565b60008060008060a08587031215611e2c57611e2b6118b2565b5b6000611e3a878288016119ed565b945050602085013567ffffffffffffffff811115611e5b57611e5a6118b7565b5b611e67878288016118cb565b93509350506040611e7a87828801611df0565b91505092959194509250565b60008060008060008060a08789031215611ea357611ea26118b2565b5b6000611eb189828a01611d9b565b9650506020611ec289828a01611d9b565b9550506040611ed389828a016119ed565b9450506060611ee489828a016119ed565b935050608087013567ffffffffffffffff811115611f0557611f046118b7565b5b611f1189828a01611b0c565b92509250509295509295509295565b60008060408385031215611f3757611f366118b2565b5b6000611f45858286016119ed565b9250506020611f56858286016119ed565b9150509250929050565b6000604082019050611f756000830185611ab5565b611f826020830184611ab5565b9392505050565b600060a082019050611f9e6000830188611bd6565b611fab6020830187611ab5565b611fb86040830186611ab5565b611fc56060830185611cf8565b611fd26080830184611cf8565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000612012601083611c67565b915061201d82611fdc565b602082019050919050565b6000602082019050818103600083015261204181612005565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612082826119cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120b4576120b3612048565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061214057607f821691505b602082108103612153576121526120f9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261217e565b6121c5868361217e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006122026121fd6121f8846119cc565b6121dd565b6119cc565b9050919050565b6000819050919050565b61221c836121e7565b61223061222882612209565b84845461218b565b825550505050565b600090565b612245612238565b612250818484612213565b505050565b5b818110156122745761226960008261223d565b600181019050612256565b5050565b601f8211156122b95761228a81612159565b6122938461216e565b810160208510156122a2578190505b6122b66122ae8561216e565b830182612255565b50505b505050565b600082821c905092915050565b60006122dc600019846008026122be565b1980831691505092915050565b60006122f583836122cb565b9150826002028217905092915050565b61230f83836120bf565b67ffffffffffffffff811115612328576123276120ca565b5b6123328254612128565b61233d828285612278565b6000601f83116001811461236c576000841561235a578287013590505b61236485826122e9565b8655506123cc565b601f19841661237a86612159565b60005b828110156123a25784890135825560018201915060208501945060208101905061237d565b868310156123bf57848901356123bb601f8916826122cb565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061240b601183611c67565b9150612416826123d5565b602082019050919050565b6000602082019050818103600083015261243a816123fe565b9050919050565b600061244c826119cc565b9150612457836119cc565b925082820190508082111561246f5761246e612048565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006124ab601883611c67565b91506124b682612475565b602082019050919050565b600060208201905081810360008301526124da8161249e565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061253d603a83611c67565b9150612548826124e1565b604082019050919050565b6000602082019050818103600083015261256c81612530565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006125cf603483611c67565b91506125da82612573565b604082019050919050565b600060208201905081810360008301526125fe816125c2565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000612661602283611c67565b915061266c82612605565b604082019050919050565b6000602082019050818103600083015261269081612654565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006126cd602083611c67565b91506126d882612697565b602082019050919050565b600060208201905081810360008301526126fc816126c0565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061275f602483611c67565b915061276a82612703565b604082019050919050565b6000602082019050818103600083015261278e81612752565b9050919050565b60006040820190506127aa6000830185611bd6565b6127b76020830184611ab5565b9392505050565b6000815190506127cd81611d84565b92915050565b6000602082840312156127e9576127e86118b2565b5b60006127f7848285016127be565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612836602083611c67565b915061284182612800565b602082019050919050565b6000602082019050818103600083015261286581612829565b9050919050565b6000815461287981612128565b6128838186611c67565b9450600182166000811461289e57600181146128b4576128e7565b60ff1983168652811515602002860193506128e7565b6128bd85612159565b60005b838110156128df578154818901526001820191506020810190506128c0565b808801955050505b50505092915050565b60006040820190506129056000830185611bd6565b8181036020830152612917818461286c565b90509392505050565b60008151905061292f816119d6565b92915050565b60006020828403121561294b5761294a6118b2565b5b600061295984828501612920565b91505092915050565b60006040820190506129776000830185611ab5565b6129846020830184611cf8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129c5826119cc565b91506129d0836119cc565b9250826129e0576129df61298b565b5b828204905092915050565b60006129f6826119cc565b9150612a01836119cc565b9250828203905081811115612a1957612a18612048565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b612a48816119cc565b82525050565b6000612a5a8383612a3f565b60208301905092915050565b6000602082019050919050565b612a7c81612a1f565b612a868184612a2a565b9250612a9182612a35565b8060005b83811015612ac2578151612aa98782612a4e565b9650612ab483612a66565b925050600181019050612a95565b505050505050565b6000819050919050565b6000612aef612aea612ae584612aca565b6121dd565b6119cc565b9050919050565b612aff81612ad4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612b2c82612b05565b612b368185612b10565b9350612b46818560208601611c78565b612b4f81611ca2565b840191505092915050565b600061014082019050612b70600083018b611ab5565b612b7d602083018a611ab5565b612b8a6040830189612a73565b612b976080830188612a73565b612ba460c0830187612af6565b612bb160e0830186611cf8565b612bbf610100830185611cf8565b818103610120830152612bd28184612b21565b90509998505050505050505050565b6000606082019050612bf66000830186611ab5565b612c036020830185611ab5565b612c106040830184611cf8565b949350505050565b82818337600083830152505050565b6000612c338385611c67565b9350612c40838584612c18565b612c4983611ca2565b840190509392505050565b82818337505050565b612c6960608383612c54565b5050565b600060e0820190508181036000830152612c8881888a612c27565b9050612c976020830187611bd6565b612ca46040830186612c5d565b612cb160a0830185611cf8565b81810360c0830152612cc38184612b21565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d2c603183611c67565b9150612d3782612cd0565b604082019050919050565b60006020820190508181036000830152612d5b81612d1f565b9050919050565b50565b6000612d72600083612b10565b9150612d7d82612d62565b600082019050919050565b600061014082019050612d9e600083018a611ab5565b612dab6020830189611ab5565b612db86040830188612a73565b612dc56080830187612a73565b612dd260c0830186612af6565b612ddf60e0830185611cf8565b612ded610100830184611cf8565b818103610120830152612dff81612d65565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612e69603383611c67565b9150612e7482612e0d565b604082019050919050565b60006020820190508181036000830152612e9881612e5c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ed5601a83611c67565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b6000612f16826119cc565b9150612f21836119cc565b925082612f3157612f3061298b565b5b82820690509291505056fea2646970667358221220c1a9c502c28e6fa331e1f294c63eb55c51dd87a23a4a31c18c27b73180fd170364736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b50604051620031ee380380620031ee8339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612f926200025c600039600081816108b9015281816109c001528181610ada01528181610f1a0152818161106c01526111350152612f926000f3fe6080604052600436106100e85760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102dc578063cf37625614610307578063d5a44f8614610345578063d76b679414610385576100e8565b806399ad6c561461022f578063a035b1fe1461024b578063b4e6a1d514610276578063b5b20c00146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806395edaaf214610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b6101076004803603810190610102919061169b565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b919061177c565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117de565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f919061184f565b6105b7565b60405161019191906117de565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118c3565b610636565b6040516101d49796959493929190611a21565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611aca565b6107c2565b005b34801561021257600080fd5b5061022d60048036038101906102289190611b60565b610b9a565b005b61024960048036038101906102449190611c17565b610dc7565b005b34801561025757600080fd5b50610260610f10565b60405161026d91906117de565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190611c8b565b610f16565b6040516102aa91906117de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190611d25565b611230565b005b3480156102e857600080fd5b506102f16113a5565b6040516102fe91906117de565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906118c3565b6113ab565b60405161033c929190611d65565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906118c3565b6113cf565b60405161037c9493929190611d8e565b60405180910390f35b34801561039157600080fd5b5061039a61142c565b6040516103a791906117de565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e1f565b60405180910390fd5b60006007600081548092919061040a90611e6e565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611432565b816003018190555083838260040191826104979291906120fc565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d890612218565b60405180910390fd5b6000600560008154809291906104f690611e6e565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b9190612238565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117de565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118c3565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611d65565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f1f565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f1f565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118ff565b5b8160020160009054906101000a900460ff166003811115610811576108106118ff565b5b14610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906122b8565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118ff565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b815260040161093e939291906124d3565b6020604051808303816000875af115801561095d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610981919061252d565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109b492919061255a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610a0b91906125b2565b8660010154610a1a91906125e3565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610a6191906117de565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a93989796959493929190612743565b60206040518083038185885af1158015610ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad6919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b6094939291906127ca565b600060405180830381600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610bc557610bc46118ff565b5b8160020160009054906101000a900460ff166003811115610be957610be86118ff565b5b14610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061285b565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906128ed565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cfe57610cfd6118ff565b5b02179055508585836005019182610d169291906120fc565b5060005b84849050811015610d865782600601858583818110610d3c57610d3b61290d565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610d779190612a86565b50508080600101915050610d1a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610db691906117de565b60405180910390a150505050505050565b600060036000815480929190610ddc90611e6e565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610e5691906117de565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e8696959493929190612ae9565b60206040518083038185885af1158015610ea4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ec9919061252d565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f0091906117de565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612bbe565b60405180910390fd5b60008383810190610fb791906118c3565b90506000600660008381526020019081526020016000209050881580610fdb575087155b15611066578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461102f91906125b2565b9081150290604051600060405180830381858888f1935050505015801561105a573d6000803e3d6000fd5b50600192505050611226565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600401856040518463ffffffff1660e01b81526004016110ee93929190612cab565b6020604051808303816000875af115801561110d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611131919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a856001015461118091906125b2565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016111d99796959493929190612d16565b60206040518083038185885af11580156111f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121c919061252d565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612e0d565b60405180910390fd5b8060030160009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612e9f565b60405180910390fd5b80600201544211156113505781426113439190612238565b8160020181905550611369565b8181600201546113609190612238565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161139891906117de565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061143c6114b1565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516114a3929190611d65565b60405180910390a150919050565b60008060005b600554811015611538576004600082815260200190815260200160002060030160009054906101000a900460ff1661152b576004600082815260200190815260200160002060020154421161152b576004600082815260200190815260200160002060010154826115289190612238565b91505b80806001019150506114b7565b506000811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390612f0b565b60405180910390fd5b6000814461158a9190612f2b565b9050600080600090505b600554811015611625576004600082815260200190815260200160002060030160009054906101000a900460ff166116185760046000828152602001908152602001600020600201544211611618576004600082815260200190815260200160002060010154826116059190612238565b91508282111561161757809450611625565b5b8080600101915050611594565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261165b5761165a611636565b5b8235905067ffffffffffffffff8111156116785761167761163b565b5b60208301915083600182028301111561169457611693611640565b5b9250929050565b600080602083850312156116b2576116b161162c565b5b600083013567ffffffffffffffff8111156116d0576116cf611631565b5b6116dc85828601611645565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611713826116e8565b9050919050565b61172381611708565b811461172e57600080fd5b50565b6000813590506117408161171a565b92915050565b6000819050919050565b61175981611746565b811461176457600080fd5b50565b60008135905061177681611750565b92915050565b6000806000606084860312156117955761179461162c565b5b60006117a386828701611731565b93505060206117b486828701611767565b92505060406117c586828701611767565b9150509250925092565b6117d881611746565b82525050565b60006020820190506117f360008301846117cf565b92915050565b60008083601f84011261180f5761180e611636565b5b8235905067ffffffffffffffff81111561182c5761182b61163b565b5b60208301915083600182028301111561184857611847611640565b5b9250929050565b600080600080606085870312156118695761186861162c565b5b600061187787828801611767565b945050602061188887828801611767565b935050604085013567ffffffffffffffff8111156118a9576118a8611631565b5b6118b5878288016117f9565b925092505092959194509250565b6000602082840312156118d9576118d861162c565b5b60006118e784828501611767565b91505092915050565b6118f981611708565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061193f5761193e6118ff565b5b50565b60008190506119508261192e565b919050565b600061196082611942565b9050919050565b61197081611955565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b0578082015181840152602081019050611995565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d882611976565b6119e28185611981565b93506119f2818560208601611992565b6119fb816119bc565b840191505092915050565b60008115159050919050565b611a1b81611a06565b82525050565b600060e082019050611a36600083018a6118f0565b611a4360208301896117cf565b611a506040830188611967565b611a5d60608301876117cf565b8181036080830152611a6f81866119cd565b905081810360a0830152611a8381856119cd565b9050611a9260c0830184611a12565b98975050505050505050565b611aa781611a06565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae061162c565b5b6000611aef85828601611767565b9250506020611b0085828601611ab5565b9150509250929050565b60008083601f840112611b2057611b1f611636565b5b8235905067ffffffffffffffff811115611b3d57611b3c61163b565b5b602083019150836040820283011115611b5957611b58611640565b5b9250929050565b600080600080600060608688031215611b7c57611b7b61162c565b5b6000611b8a88828901611767565b955050602086013567ffffffffffffffff811115611bab57611baa611631565b5b611bb788828901611645565b9450945050604086013567ffffffffffffffff811115611bda57611bd9611631565b5b611be688828901611b0a565b92509250509295509295909350565b600081905082602060030282011115611c1157611c10611640565b5b92915050565b60008060008060a08587031215611c3157611c3061162c565b5b6000611c3f87828801611767565b945050602085013567ffffffffffffffff811115611c6057611c5f611631565b5b611c6c87828801611645565b93509350506040611c7f87828801611bf5565b91505092959194509250565b60008060008060008060a08789031215611ca857611ca761162c565b5b6000611cb689828a01611ab5565b9650506020611cc789828a01611ab5565b9550506040611cd889828a01611767565b9450506060611ce989828a01611767565b935050608087013567ffffffffffffffff811115611d0a57611d09611631565b5b611d1689828a016117f9565b92509250509295509295509295565b60008060408385031215611d3c57611d3b61162c565b5b6000611d4a85828601611767565b9250506020611d5b85828601611767565b9150509250929050565b6000604082019050611d7a60008301856117cf565b611d8760208301846117cf565b9392505050565b6000608082019050611da360008301876118f0565b611db060208301866117cf565b611dbd60408301856117cf565b611dca6060830184611a12565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611e09601083611981565b9150611e1482611dd3565b602082019050919050565b60006020820190508181036000830152611e3881611dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e7982611746565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611eab57611eaa611e3f565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f3757607f821691505b602082108103611f4a57611f49611ef0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f75565b611fbc8683611f75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ff9611ff4611fef84611746565b611fd4565b611746565b9050919050565b6000819050919050565b61201383611fde565b61202761201f82612000565b848454611f82565b825550505050565b600090565b61203c61202f565b61204781848461200a565b505050565b5b8181101561206b57612060600082612034565b60018101905061204d565b5050565b601f8211156120b05761208181611f50565b61208a84611f65565b81016020851015612099578190505b6120ad6120a585611f65565b83018261204c565b50505b505050565b600082821c905092915050565b60006120d3600019846008026120b5565b1980831691505092915050565b60006120ec83836120c2565b9150826002028217905092915050565b6121068383611eb6565b67ffffffffffffffff81111561211f5761211e611ec1565b5b6121298254611f1f565b61213482828561206f565b6000601f8311600181146121635760008415612151578287013590505b61215b85826120e0565b8655506121c3565b601f19841661217186611f50565b60005b8281101561219957848901358255600182019150602085019450602081019050612174565b868310156121b657848901356121b2601f8916826120c2565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612202601183611981565b915061220d826121cc565b602082019050919050565b60006020820190508181036000830152612231816121f5565b9050919050565b600061224382611746565b915061224e83611746565b925082820190508082111561226657612265611e3f565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006122a2602083611981565b91506122ad8261226c565b602082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b600081546122e581611f1f565b6122ef8186611981565b9450600182166000811461230a576001811461232057612353565b60ff198316865281151560200286019350612353565b61232985611f50565b60005b8381101561234b5781548189015260018201915060208101905061232c565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006123b76123b28361238d565b61239a565b9050919050565b6000819050919050565b6123d1816123be565b82525050565b6000819050919050565b60006123f46123ef8361238d565b6123d7565b9050919050565b61240481611746565b82525050565b60408201600080830154905061241f816123a4565b61242c60008601826123c8565b506001830154905061243d816123e1565b61244a60208601826123fb565b5050505050565b600061245d838361240a565b60408301905092915050565b6000600282019050919050565b60006124818261235c565b61248b8185612367565b935061249683612378565b8060005b838110156124c657816124ad8882612451565b97506124b883612469565b92505060018101905061249a565b5085935050505092915050565b60006060820190506124e860008301866118f0565b81810360208301526124fa81856122d8565b9050818103604083015261250e8184612476565b9050949350505050565b60008151905061252781611750565b92915050565b6000602082840312156125435761254261162c565b5b600061255184828501612518565b91505092915050565b600060408201905061256f60008301856117cf565b61257c6020830184611a12565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd82611746565b91506125c883611746565b9250826125d8576125d7612583565b5b828204905092915050565b60006125ee82611746565b91506125f983611746565b925082820390508181111561261157612610611e3f565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061264383836123fb565b60208301905092915050565b6000602082019050919050565b61266581612617565b61266f8184612622565b925061267a8261262d565b8060005b838110156126ab5781516126928782612637565b965061269d8361264f565b92505060018101905061267e565b505050505050565b6000819050919050565b60006126d86126d36126ce846126b3565b611fd4565b611746565b9050919050565b6126e8816126bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612715826126ee565b61271f81856126f9565b935061272f818560208601611992565b612738816119bc565b840191505092915050565b600061014082019050612759600083018b6117cf565b612766602083018a6117cf565b612773604083018961265c565b612780608083018861265c565b61278d60c08301876126df565b61279a60e0830186611a12565b6127a8610100830185611a12565b8181036101208301526127bb818461270a565b90509998505050505050505050565b60006080820190506127df60008301876117cf565b6127ec60208301866118f0565b6127f960408301856117cf565b6128066060830184611a12565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612845601883611981565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006128d7603a83611981565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612945816123be565b811461295057600080fd5b50565b600081356129608161293c565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129a284612969565b9350801983169250808416831791505092915050565b60006129d36129ce6129c9846123be565b611fd4565b6123be565b9050919050565b6000819050919050565b6129ed826129b8565b612a006129f9826129da565b8354612976565b8255505050565b60008135612a1481611750565b80915050919050565b612a2682611fde565b612a39612a3282612000565b8354612976565b8255505050565b600081016000830180612a5281612953565b9050612a5e81846129e4565b505050600181016020830180612a7381612a07565b9050612a7f8184612a1d565b5050505050565b612a908282612a40565b5050565b82818337600083830152505050565b6000612aaf8385611981565b9350612abc838584612a94565b612ac5836119bc565b840190509392505050565b82818337505050565b612ae560608383612ad0565b5050565b600060e0820190508181036000830152612b0481888a612aa3565b9050612b1360208301876118f0565b612b206040830186612ad9565b612b2d60a0830185611a12565b81810360c0830152612b3f818461270a565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ba8603183611981565b9150612bb382612b4c565b604082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b600081519050919050565b6000819050602082019050919050565b604082016000820151612c0f60008501826123c8565b506020820151612c2260208501826123fb565b50505050565b6000612c348383612bf9565b60408301905092915050565b6000602082019050919050565b6000612c5882612bde565b612c628185612367565b9350612c6d83612be9565b8060005b83811015612c9e578151612c858882612c28565b9750612c9083612c40565b925050600181019050612c71565b5085935050505092915050565b6000606082019050612cc060008301866118f0565b8181036020830152612cd281856122d8565b90508181036040830152612ce68184612c4d565b9050949350505050565b50565b6000612d006000836126f9565b9150612d0b82612cf0565b600082019050919050565b600061014082019050612d2c600083018a6117cf565b612d3960208301896117cf565b612d46604083018861265c565b612d53608083018761265c565b612d6060c08301866126df565b612d6d60e0830185611a12565b612d7b610100830184611a12565b818103610120830152612d8d81612cf3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612df7603383611981565b9150612e0282612d9b565b604082019050919050565b60006020820190508181036000830152612e2681612dea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612e89602483611981565b9150612e9482612e2d565b604082019050919050565b60006020820190508181036000830152612eb881612e7c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ef5601a83611981565b9150612f0082612ebf565b602082019050919050565b60006020820190508181036000830152612f2481612ee8565b9050919050565b6000612f3682611746565b9150612f4183611746565b925082612f5157612f50612583565b5b82820690509291505056fea264697066735822122064f8b43b8ada94026afeb5e6c087c5e2b7247705dc4f4470cbd79a386641089564736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102dc578063cf37625614610307578063d5a44f8614610345578063d76b679414610385576100e8565b806399ad6c561461022f578063a035b1fe1461024b578063b4e6a1d514610276578063b5b20c00146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806395edaaf214610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b6101076004803603810190610102919061169b565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b919061177c565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117de565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f919061184f565b6105b7565b60405161019191906117de565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118c3565b610636565b6040516101d49796959493929190611a21565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611aca565b6107c2565b005b34801561021257600080fd5b5061022d60048036038101906102289190611b60565b610b9a565b005b61024960048036038101906102449190611c17565b610dc7565b005b34801561025757600080fd5b50610260610f10565b60405161026d91906117de565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190611c8b565b610f16565b6040516102aa91906117de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190611d25565b611230565b005b3480156102e857600080fd5b506102f16113a5565b6040516102fe91906117de565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906118c3565b6113ab565b60405161033c929190611d65565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906118c3565b6113cf565b60405161037c9493929190611d8e565b60405180910390f35b34801561039157600080fd5b5061039a61142c565b6040516103a791906117de565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e1f565b60405180910390fd5b60006007600081548092919061040a90611e6e565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611432565b816003018190555083838260040191826104979291906120fc565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d890612218565b60405180910390fd5b6000600560008154809291906104f690611e6e565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b9190612238565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117de565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118c3565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611d65565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f1f565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f1f565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118ff565b5b8160020160009054906101000a900460ff166003811115610811576108106118ff565b5b14610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906122b8565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118ff565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b815260040161093e939291906124d3565b6020604051808303816000875af115801561095d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610981919061252d565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109b492919061255a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610a0b91906125b2565b8660010154610a1a91906125e3565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610a6191906117de565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a93989796959493929190612743565b60206040518083038185885af1158015610ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad6919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b6094939291906127ca565b600060405180830381600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610bc557610bc46118ff565b5b8160020160009054906101000a900460ff166003811115610be957610be86118ff565b5b14610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061285b565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906128ed565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cfe57610cfd6118ff565b5b02179055508585836005019182610d169291906120fc565b5060005b84849050811015610d865782600601858583818110610d3c57610d3b61290d565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610d779190612a86565b50508080600101915050610d1a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610db691906117de565b60405180910390a150505050505050565b600060036000815480929190610ddc90611e6e565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610e5691906117de565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e8696959493929190612ae9565b60206040518083038185885af1158015610ea4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ec9919061252d565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f0091906117de565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612bbe565b60405180910390fd5b60008383810190610fb791906118c3565b90506000600660008381526020019081526020016000209050881580610fdb575087155b15611066578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461102f91906125b2565b9081150290604051600060405180830381858888f1935050505015801561105a573d6000803e3d6000fd5b50600192505050611226565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600401856040518463ffffffff1660e01b81526004016110ee93929190612cab565b6020604051808303816000875af115801561110d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611131919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a856001015461118091906125b2565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016111d99796959493929190612d16565b60206040518083038185885af11580156111f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121c919061252d565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612e0d565b60405180910390fd5b8060030160009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612e9f565b60405180910390fd5b80600201544211156113505781426113439190612238565b8160020181905550611369565b8181600201546113609190612238565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161139891906117de565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061143c6114b1565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516114a3929190611d65565b60405180910390a150919050565b60008060005b600554811015611538576004600082815260200190815260200160002060030160009054906101000a900460ff1661152b576004600082815260200190815260200160002060020154421161152b576004600082815260200190815260200160002060010154826115289190612238565b91505b80806001019150506114b7565b506000811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390612f0b565b60405180910390fd5b6000814461158a9190612f2b565b9050600080600090505b600554811015611625576004600082815260200190815260200160002060030160009054906101000a900460ff166116185760046000828152602001908152602001600020600201544211611618576004600082815260200190815260200160002060010154826116059190612238565b91508282111561161757809450611625565b5b8080600101915050611594565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261165b5761165a611636565b5b8235905067ffffffffffffffff8111156116785761167761163b565b5b60208301915083600182028301111561169457611693611640565b5b9250929050565b600080602083850312156116b2576116b161162c565b5b600083013567ffffffffffffffff8111156116d0576116cf611631565b5b6116dc85828601611645565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611713826116e8565b9050919050565b61172381611708565b811461172e57600080fd5b50565b6000813590506117408161171a565b92915050565b6000819050919050565b61175981611746565b811461176457600080fd5b50565b60008135905061177681611750565b92915050565b6000806000606084860312156117955761179461162c565b5b60006117a386828701611731565b93505060206117b486828701611767565b92505060406117c586828701611767565b9150509250925092565b6117d881611746565b82525050565b60006020820190506117f360008301846117cf565b92915050565b60008083601f84011261180f5761180e611636565b5b8235905067ffffffffffffffff81111561182c5761182b61163b565b5b60208301915083600182028301111561184857611847611640565b5b9250929050565b600080600080606085870312156118695761186861162c565b5b600061187787828801611767565b945050602061188887828801611767565b935050604085013567ffffffffffffffff8111156118a9576118a8611631565b5b6118b5878288016117f9565b925092505092959194509250565b6000602082840312156118d9576118d861162c565b5b60006118e784828501611767565b91505092915050565b6118f981611708565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061193f5761193e6118ff565b5b50565b60008190506119508261192e565b919050565b600061196082611942565b9050919050565b61197081611955565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b0578082015181840152602081019050611995565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d882611976565b6119e28185611981565b93506119f2818560208601611992565b6119fb816119bc565b840191505092915050565b60008115159050919050565b611a1b81611a06565b82525050565b600060e082019050611a36600083018a6118f0565b611a4360208301896117cf565b611a506040830188611967565b611a5d60608301876117cf565b8181036080830152611a6f81866119cd565b905081810360a0830152611a8381856119cd565b9050611a9260c0830184611a12565b98975050505050505050565b611aa781611a06565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae061162c565b5b6000611aef85828601611767565b9250506020611b0085828601611ab5565b9150509250929050565b60008083601f840112611b2057611b1f611636565b5b8235905067ffffffffffffffff811115611b3d57611b3c61163b565b5b602083019150836040820283011115611b5957611b58611640565b5b9250929050565b600080600080600060608688031215611b7c57611b7b61162c565b5b6000611b8a88828901611767565b955050602086013567ffffffffffffffff811115611bab57611baa611631565b5b611bb788828901611645565b9450945050604086013567ffffffffffffffff811115611bda57611bd9611631565b5b611be688828901611b0a565b92509250509295509295909350565b600081905082602060030282011115611c1157611c10611640565b5b92915050565b60008060008060a08587031215611c3157611c3061162c565b5b6000611c3f87828801611767565b945050602085013567ffffffffffffffff811115611c6057611c5f611631565b5b611c6c87828801611645565b93509350506040611c7f87828801611bf5565b91505092959194509250565b60008060008060008060a08789031215611ca857611ca761162c565b5b6000611cb689828a01611ab5565b9650506020611cc789828a01611ab5565b9550506040611cd889828a01611767565b9450506060611ce989828a01611767565b935050608087013567ffffffffffffffff811115611d0a57611d09611631565b5b611d1689828a016117f9565b92509250509295509295509295565b60008060408385031215611d3c57611d3b61162c565b5b6000611d4a85828601611767565b9250506020611d5b85828601611767565b9150509250929050565b6000604082019050611d7a60008301856117cf565b611d8760208301846117cf565b9392505050565b6000608082019050611da360008301876118f0565b611db060208301866117cf565b611dbd60408301856117cf565b611dca6060830184611a12565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611e09601083611981565b9150611e1482611dd3565b602082019050919050565b60006020820190508181036000830152611e3881611dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e7982611746565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611eab57611eaa611e3f565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f3757607f821691505b602082108103611f4a57611f49611ef0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f75565b611fbc8683611f75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ff9611ff4611fef84611746565b611fd4565b611746565b9050919050565b6000819050919050565b61201383611fde565b61202761201f82612000565b848454611f82565b825550505050565b600090565b61203c61202f565b61204781848461200a565b505050565b5b8181101561206b57612060600082612034565b60018101905061204d565b5050565b601f8211156120b05761208181611f50565b61208a84611f65565b81016020851015612099578190505b6120ad6120a585611f65565b83018261204c565b50505b505050565b600082821c905092915050565b60006120d3600019846008026120b5565b1980831691505092915050565b60006120ec83836120c2565b9150826002028217905092915050565b6121068383611eb6565b67ffffffffffffffff81111561211f5761211e611ec1565b5b6121298254611f1f565b61213482828561206f565b6000601f8311600181146121635760008415612151578287013590505b61215b85826120e0565b8655506121c3565b601f19841661217186611f50565b60005b8281101561219957848901358255600182019150602085019450602081019050612174565b868310156121b657848901356121b2601f8916826120c2565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612202601183611981565b915061220d826121cc565b602082019050919050565b60006020820190508181036000830152612231816121f5565b9050919050565b600061224382611746565b915061224e83611746565b925082820190508082111561226657612265611e3f565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006122a2602083611981565b91506122ad8261226c565b602082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b600081546122e581611f1f565b6122ef8186611981565b9450600182166000811461230a576001811461232057612353565b60ff198316865281151560200286019350612353565b61232985611f50565b60005b8381101561234b5781548189015260018201915060208101905061232c565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006123b76123b28361238d565b61239a565b9050919050565b6000819050919050565b6123d1816123be565b82525050565b6000819050919050565b60006123f46123ef8361238d565b6123d7565b9050919050565b61240481611746565b82525050565b60408201600080830154905061241f816123a4565b61242c60008601826123c8565b506001830154905061243d816123e1565b61244a60208601826123fb565b5050505050565b600061245d838361240a565b60408301905092915050565b6000600282019050919050565b60006124818261235c565b61248b8185612367565b935061249683612378565b8060005b838110156124c657816124ad8882612451565b97506124b883612469565b92505060018101905061249a565b5085935050505092915050565b60006060820190506124e860008301866118f0565b81810360208301526124fa81856122d8565b9050818103604083015261250e8184612476565b9050949350505050565b60008151905061252781611750565b92915050565b6000602082840312156125435761254261162c565b5b600061255184828501612518565b91505092915050565b600060408201905061256f60008301856117cf565b61257c6020830184611a12565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd82611746565b91506125c883611746565b9250826125d8576125d7612583565b5b828204905092915050565b60006125ee82611746565b91506125f983611746565b925082820390508181111561261157612610611e3f565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061264383836123fb565b60208301905092915050565b6000602082019050919050565b61266581612617565b61266f8184612622565b925061267a8261262d565b8060005b838110156126ab5781516126928782612637565b965061269d8361264f565b92505060018101905061267e565b505050505050565b6000819050919050565b60006126d86126d36126ce846126b3565b611fd4565b611746565b9050919050565b6126e8816126bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612715826126ee565b61271f81856126f9565b935061272f818560208601611992565b612738816119bc565b840191505092915050565b600061014082019050612759600083018b6117cf565b612766602083018a6117cf565b612773604083018961265c565b612780608083018861265c565b61278d60c08301876126df565b61279a60e0830186611a12565b6127a8610100830185611a12565b8181036101208301526127bb818461270a565b90509998505050505050505050565b60006080820190506127df60008301876117cf565b6127ec60208301866118f0565b6127f960408301856117cf565b6128066060830184611a12565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612845601883611981565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006128d7603a83611981565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612945816123be565b811461295057600080fd5b50565b600081356129608161293c565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129a284612969565b9350801983169250808416831791505092915050565b60006129d36129ce6129c9846123be565b611fd4565b6123be565b9050919050565b6000819050919050565b6129ed826129b8565b612a006129f9826129da565b8354612976565b8255505050565b60008135612a1481611750565b80915050919050565b612a2682611fde565b612a39612a3282612000565b8354612976565b8255505050565b600081016000830180612a5281612953565b9050612a5e81846129e4565b505050600181016020830180612a7381612a07565b9050612a7f8184612a1d565b5050505050565b612a908282612a40565b5050565b82818337600083830152505050565b6000612aaf8385611981565b9350612abc838584612a94565b612ac5836119bc565b840190509392505050565b82818337505050565b612ae560608383612ad0565b5050565b600060e0820190508181036000830152612b0481888a612aa3565b9050612b1360208301876118f0565b612b206040830186612ad9565b612b2d60a0830185611a12565b81810360c0830152612b3f818461270a565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ba8603183611981565b9150612bb382612b4c565b604082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b600081519050919050565b6000819050602082019050919050565b604082016000820151612c0f60008501826123c8565b506020820151612c2260208501826123fb565b50505050565b6000612c348383612bf9565b60408301905092915050565b6000602082019050919050565b6000612c5882612bde565b612c628185612367565b9350612c6d83612be9565b8060005b83811015612c9e578151612c858882612c28565b9750612c9083612c40565b925050600181019050612c71565b5085935050505092915050565b6000606082019050612cc060008301866118f0565b8181036020830152612cd281856122d8565b90508181036040830152612ce68184612c4d565b9050949350505050565b50565b6000612d006000836126f9565b9150612d0b82612cf0565b600082019050919050565b600061014082019050612d2c600083018a6117cf565b612d3960208301896117cf565b612d46604083018861265c565b612d53608083018761265c565b612d6060c08301866126df565b612d6d60e0830185611a12565b612d7b610100830184611a12565b818103610120830152612d8d81612cf3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612df7603383611981565b9150612e0282612d9b565b604082019050919050565b60006020820190508181036000830152612e2681612dea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612e89602483611981565b9150612e9482612e2d565b604082019050919050565b60006020820190508181036000830152612eb881612e7c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ef5601a83611981565b9150612f0082612ebf565b602082019050919050565b60006020820190508181036000830152612f2481612ee8565b9050919050565b6000612f3682611746565b9150612f4183611746565b925082612f5157612f50612583565b5b82820690509291505056fea264697066735822122064f8b43b8ada94026afeb5e6c087c5e2b7247705dc4f4470cbd79a386641089564736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Proposals.json b/client/src/assets/Proposals.json index 74a80ea..589bfb7 100644 --- a/client/src/assets/Proposals.json +++ b/client/src/assets/Proposals.json @@ -348,8 +348,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003401380380620034018339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051612f42620004bf6000396000818161033e015281816108d901528181610ac501528181610cbf0152818161155b01526117290152612f426000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a0c565b610229565b6040516100bc99989796959493929190611bab565b60405180910390f35b6100df60048036038101906100da9190611d74565b610339565b6040516100ec9190611e30565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a0c565b61059d565b6040516101299190612030565b60405180910390f35b34801561013e57600080fd5b506101596004803603810190610154919061204c565b6108d6565b005b34801561016757600080fd5b50610182600480360381019061017d919061208c565b610ac1565b60405161018f9190611e30565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a0c565b611396565b005b3480156101cd57600080fd5b506101d66114c2565b6040516101e39190611e30565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a0c565b6114c8565b6040516102209190612126565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612170565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612170565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff869240888b8b6040518463ffffffff1660e01b8152600401610399939291906121ee565b6020604051808303816000875af11580156103b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dc9190612235565b9050600160008154809291906103f190612291565b91905055915060008060008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003018190555042816004018190555086600060038110610476576104756122d9565b5b602002013581600801600060038110610492576104916122d9565b5b6011020160000181905550866001600381106104b1576104b06122d9565b5b6020020135816008016001600381106104cd576104cc6122d9565b5b6011020160000181905550866002600381106104ec576104eb6122d9565b5b602002013581600801600260038110610508576105076122d9565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c0191826105589291906124ee565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516105889190611e30565b60405180910390a15050979650505050505050565b6105a561192d565b60008060008481526020019081526020016000209050806008016000600381106105d2576105d16122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a2578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f0565b50505050826000600381106106ba576106b96122d9565b5b6020020181905250806008016001600381106106d9576106d86122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156107a9578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106f7565b50505050826001600381106107c1576107c06122d9565b5b6020020181905250806008016002600381106107e0576107df6122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b0578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906107fe565b50505050826002600381106108c8576108c76122d9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093091906125be565b602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190612235565b10156109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a99061264b565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a1d919061266b565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a7e919061269f565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610ab49190611e30565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890612745565b60405180910390fd5b60008060008585810190610b659190612765565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9957610b986122d9565b5b601102019050600081600101826010015460038110610bbb57610bba6122d9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cbb5760048360050160006101000a81548160ff02191690836005811115610c5557610c54611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c899190612804565b60405180910390a183836002016000828254610ca5919061269f565b925050819055506001965050505050505061138c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c9190612235565b8b8d610d58919061269f565b6002610d649190612832565b1015905060016005811115610d7c57610d7b611a89565b5b8460050160009054906101000a900460ff166005811115610da057610d9f611a89565b5b03610ec15760008614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906128c0565b60405180910390fd5b8d8015610df25750805b15610e295760028460050160006101000a81548160ff02191690836005811115610e1f57610e1e611a89565b5b0217905550610ebc565b6002836010015410610e9e5760048460050160006101000a81548160ff02191690836005811115610e5d57610e5c611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e91919061292c565b60405180910390a1610ebb565b6001836010016000828254610eb3919061269f565b925050819055505b5b611268565b60026005811115610ed557610ed4611a89565b5b8460050160009054906101000a900460ff166005811115610ef957610ef8611a89565b5b0361101a5760018614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f38906129a6565b60405180910390fd5b8d8015610f4b5750805b15610f825760038460050160006101000a81548160ff02191690836005811115610f7857610f77611a89565b5b0217905550611015565b6002836010015410610ff75760048460050160006101000a81548160ff02191690836005811115610fb657610fb5611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fea919061292c565b60405180910390a1611014565b600183601001600082825461100c919061269f565b925050819055505b5b611267565b6003600581111561102e5761102d611a89565b5b8460050160009054906101000a900460ff16600581111561105257611051611a89565b5b03611266576002861461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190612a12565b60405180910390fd5b8d80156110a45750805b156111d25760058460050160006101000a81548160ff021916908360058111156110d1576110d0611a89565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b876040516111059190611e30565b60405180910390a183603b0160009054906101000a900460ff16156111cd578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118893929190612ab6565b6020604051808303816000875af11580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190612235565b505b611265565b60028360100154106112475760048460050160006101000a81548160ff0219169083600581111561120657611205611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161123a919061292c565b60405180910390a1611264565b600183601001600082825461125c919061269f565b925050819055505b5b5b5b5b6001600581111561127c5761127b611a89565b5b8460050160009054906101000a900460ff1660058111156112a05761129f611a89565b5b036112c6576112c1876000600a87600101546112bc9190612b23565b6116f4565b611380565b600260058111156112da576112d9611a89565b5b8460050160009054906101000a900460ff1660058111156112fe576112fd611a89565b5b036113245761131f876001600a876001015461131a9190612b23565b6116f4565b61137f565b6003600581111561133857611337611a89565b5b8460050160009054906101000a900460ff16600581111561135c5761135b611a89565b5b0361137e5761137d876002600a87600101546113789190612b23565b6116f4565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c0576113bf611a89565b5b8160050160009054906101000a900460ff1660058111156113e4576113e3611a89565b5b148061142457506005808111156113fe576113fd611a89565b5b8160050160009054906101000a900460ff16600581111561142257611421611a89565b5b145b611463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145a90612bec565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114bc573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f3576114f2611a89565b5b8160050160009054906101000a900460ff16600581111561151757611516611a89565b5b14611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90612c7e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e89190612235565b8260070154600a6115f99190612832565b1015905060006301e133808360040154611613919061269f565b421190508161169e5780156116925760048360050160006101000a81548160ff0219169083600581111561164a57611649611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161167e9190612d10565b60405180910390a1600093505050506116ef565b600093505050506116ef565b60018360050160006101000a81548160ff021916908360058111156116c6576116c5611a89565b5b02179055506116e7856000600a86600101546116e29190612b23565b6116f4565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461171e919061266b565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061177f5761177e6122d9565b5b60110201600001546006896003811061179b5761179a6122d9565b5b60020201600c8a600381106117b3576117b26122d9565b5b6002020160028b600381106117cb576117ca6122d9565b5b015460058c600381106117e1576117e06122d9565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161180e93929190612d3e565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611840989796959493929190612e5c565b60206040518083038185885af115801561185e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118839190612235565b9050600082600801856003811061189d5761189c6122d9565b5b6011020190506000816001018260100154600381106118bf576118be6122d9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161191c929190612ee3565b60405180910390a150505050505050565b60405180606001604052806003905b61194461195a565b81526020019060019003908161193c5790505090565b60405180606001604052806003905b611971611987565b8152602001906001900390816119695790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119e9816119d6565b81146119f457600080fd5b50565b600081359050611a06816119e0565b92915050565b600060208284031215611a2257611a216119cc565b5b6000611a30848285016119f7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6482611a39565b9050919050565b611a7481611a59565b82525050565b611a83816119d6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611ac957611ac8611a89565b5b50565b6000819050611ada82611ab8565b919050565b6000611aea82611acc565b9050919050565b611afa81611adf565b82525050565b60008115159050919050565b611b1581611b00565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b55578082015181840152602081019050611b3a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b7d82611b1b565b611b878185611b26565b9350611b97818560208601611b37565b611ba081611b61565b840191505092915050565b600061012082019050611bc1600083018c611a6b565b611bce602083018b611a7a565b611bdb604083018a611a7a565b611be86060830189611a7a565b611bf56080830188611a7a565b611c0260a0830187611af1565b611c0f60c0830186611a7a565b611c1c60e0830185611b0c565b818103610100830152611c2f8184611b72565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6457611c63611c3f565b5b8235905067ffffffffffffffff811115611c8157611c80611c44565b5b602083019150836001820283011115611c9d57611c9c611c49565b5b9250929050565b611cad81611a59565b8114611cb857600080fd5b50565b600081359050611cca81611ca4565b92915050565b600081905082602060030282011115611cec57611ceb611c49565b5b92915050565b611cfb81611b00565b8114611d0657600080fd5b50565b600081359050611d1881611cf2565b92915050565b60008083601f840112611d3457611d33611c3f565b5b8235905067ffffffffffffffff811115611d5157611d50611c44565b5b602083019150836001820283011115611d6d57611d6c611c49565b5b9250929050565b600080600080600080600060e0888a031215611d9357611d926119cc565b5b600088013567ffffffffffffffff811115611db157611db06119d1565b5b611dbd8a828b01611c4e565b97509750506020611dd08a828b01611cbb565b9550506040611de18a828b01611cd0565b94505060a0611df28a828b01611d09565b93505060c088013567ffffffffffffffff811115611e1357611e126119d1565b5b611e1f8a828b01611d1e565b925092505092959891949750929550565b6000602082019050611e456000830184611a7a565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e94816119d6565b82525050565b611ea381611b00565b82525050565b60e082016000820151611ebf6000850182611e8b565b506020820151611ed26020850182611e9a565b506040820151611ee56040850182611e9a565b506060820151611ef86060850182611e8b565b506080820151611f0b6080850182611e8b565b5060a0820151611f1e60a0850182611e9a565b5060c0820151611f3160c0850182611e9a565b50505050565b6000611f438383611ea9565b60e08301905092915050565b6000602082019050919050565b611f6581611e6b565b611f6f8184611e76565b9250611f7a82611e81565b8060005b83811015611fab578151611f928782611f37565b9650611f9d83611f4f565b925050600181019050611f7e565b505050505050565b6000611fbf8383611f5c565b6102a08301905092915050565b6000602082019050919050565b611fe281611e4b565b611fec8184611e56565b9250611ff782611e61565b8060005b8381101561202857815161200f8782611fb3565b965061201a83611fcc565b925050600181019050611ffb565b505050505050565b60006107e0820190506120466000830184611fd9565b92915050565b60008060408385031215612063576120626119cc565b5b6000612071858286016119f7565b9250506020612082858286016119f7565b9150509250929050565b60008060008060008060a087890312156120a9576120a86119cc565b5b60006120b789828a01611d09565b96505060206120c889828a01611d09565b95505060406120d989828a016119f7565b94505060606120ea89828a016119f7565b935050608087013567ffffffffffffffff81111561210b5761210a6119d1565b5b61211789828a01611d1e565b92509250509295509295509295565b600060208201905061213b6000830184611b0c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218857607f821691505b60208210810361219b5761219a612141565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121cd83856121a1565b93506121da8385846121b2565b6121e383611b61565b840190509392505050565b60006040820190506122036000830186611a6b565b81810360208301526122168184866121c1565b9050949350505050565b60008151905061222f816119e0565b92915050565b60006020828403121561224b5761224a6119cc565b5b600061225984828501612220565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061229c826119d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122ce576122cd612262565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612367565b6123ae8683612367565b95508019841693508086168417925050509392505050565b6000819050919050565b60006123eb6123e66123e1846119d6565b6123c6565b6119d6565b9050919050565b6000819050919050565b612405836123d0565b612419612411826123f2565b848454612374565b825550505050565b600090565b61242e612421565b6124398184846123fc565b505050565b5b8181101561245d57612452600082612426565b60018101905061243f565b5050565b601f8211156124a25761247381612342565b61247c84612357565b8101602085101561248b578190505b61249f61249785612357565b83018261243e565b50505b505050565b600082821c905092915050565b60006124c5600019846008026124a7565b1980831691505092915050565b60006124de83836124b4565b9150826002028217905092915050565b6124f88383612308565b67ffffffffffffffff81111561251157612510612313565b5b61251b8254612170565b612526828285612461565b6000601f8311600181146125555760008415612543578287013590505b61254d85826124d2565b8655506125b5565b601f19841661256386612342565b60005b8281101561258b57848901358255600182019150602085019450602081019050612566565b868310156125a857848901356125a4601f8916826124b4565b8355505b6001600288020188555050505b50505050505050565b60006020820190506125d36000830184611a6b565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006126356023836121a1565b9150612640826125d9565b604082019050919050565b6000602082019050818103600083015261266481612628565b9050919050565b6000612676826119d6565b9150612681836119d6565b925082820390508181111561269957612698612262565b5b92915050565b60006126aa826119d6565b91506126b5836119d6565b92508282019050808211156126cd576126cc612262565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061272f6031836121a1565b915061273a826126d3565b604082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b60008060006060848603121561277e5761277d6119cc565b5b600061278c868287016119f7565b935050602061279d868287016119f7565b92505060406127ae868287016119f7565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b60006127ee600e836121a1565b91506127f9826127b8565b602082019050919050565b60006040820190506128196000830184611a7a565b818103602083015261282a816127e1565b905092915050565b600061283d826119d6565b9150612848836119d6565b9250828202612856816119d6565b9150828204841483151761286d5761286c612262565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006128aa6016836121a1565b91506128b582612874565b602082019050919050565b600060208201905081810360008301526128d98161289d565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006129166014836121a1565b9150612921826128e0565b602082019050919050565b60006040820190506129416000830184611a7a565b818103602083015261295281612909565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b60006129906016836121a1565b915061299b8261295a565b602082019050919050565b600060208201905081810360008301526129bf81612983565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b60006129fc6016836121a1565b9150612a07826129c6565b602082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b60008154612a3f81612170565b612a498186611b26565b94506001821660008114612a645760018114612a7a57612aad565b60ff198316865281151560200286019350612aad565b612a8385612342565b60005b83811015612aa557815481890152600182019150602081019050612a86565b808801955050505b50505092915050565b6000606082019050612acb6000830186611a7a565b612ad86020830185611a7a565b8181036040830152612aea8184612a32565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b2e826119d6565b9150612b39836119d6565b925082612b4957612b48612af4565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612bd6604e836121a1565b9150612be182612b54565b606082019050919050565b60006020820190508181036000830152612c0581612bc9565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612c68602b836121a1565b9150612c7382612c0c565b604082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612cfa602d836121a1565b9150612d0582612c9e565b604082019050919050565b6000604082019050612d256000830184611a7a565b8181036020830152612d3681612ced565b905092915050565b6000606082019050612d536000830186611a7a565b612d606020830185611a7a565b612d6d6040830184611a7a565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612da18383611e8b565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612dd7612dd283612dad565b612dba565b9050919050565b6000612dea8254612dc4565b9050919050565b6000600182019050919050565b612e0781612d75565b612e118184612d80565b9250612e1c82612d8b565b8060005b83811015612e5457612e3182612dde565b612e3b8782612d95565b9650612e4683612df1565b925050600181019050612e20565b505050505050565b600061014082019050612e72600083018b611a7a565b612e7f602083018a611a7a565b612e8c6040830189612dfe565b612e996080830188612dfe565b612ea660c0830187611a7a565b612eb360e0830186611b0c565b612ec1610100830185611b0c565b818103610120830152612ed48184611b72565b90509998505050505050505050565b6000604082019050612ef86000830185611a7a565b612f056020830184611a7a565b939250505056fea26469706673582212200da23f568b15dc66f5ab8a942a4ea1dfbf06601c72ec494f9bc3be3ca76e15a664736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a0c565b610229565b6040516100bc99989796959493929190611bab565b60405180910390f35b6100df60048036038101906100da9190611d74565b610339565b6040516100ec9190611e30565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a0c565b61059d565b6040516101299190612030565b60405180910390f35b34801561013e57600080fd5b506101596004803603810190610154919061204c565b6108d6565b005b34801561016757600080fd5b50610182600480360381019061017d919061208c565b610ac1565b60405161018f9190611e30565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a0c565b611396565b005b3480156101cd57600080fd5b506101d66114c2565b6040516101e39190611e30565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a0c565b6114c8565b6040516102209190612126565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612170565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612170565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff869240888b8b6040518463ffffffff1660e01b8152600401610399939291906121ee565b6020604051808303816000875af11580156103b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dc9190612235565b9050600160008154809291906103f190612291565b91905055915060008060008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003018190555042816004018190555086600060038110610476576104756122d9565b5b602002013581600801600060038110610492576104916122d9565b5b6011020160000181905550866001600381106104b1576104b06122d9565b5b6020020135816008016001600381106104cd576104cc6122d9565b5b6011020160000181905550866002600381106104ec576104eb6122d9565b5b602002013581600801600260038110610508576105076122d9565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c0191826105589291906124ee565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e836040516105889190611e30565b60405180910390a15050979650505050505050565b6105a561192d565b60008060008481526020019081526020016000209050806008016000600381106105d2576105d16122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a2578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f0565b50505050826000600381106106ba576106b96122d9565b5b6020020181905250806008016001600381106106d9576106d86122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156107a9578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106f7565b50505050826001600381106107c1576107c06122d9565b5b6020020181905250806008016002600381106107e0576107df6122d9565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b0578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906107fe565b50505050826002600381106108c8576108c76122d9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093091906125be565b602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190612235565b10156109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a99061264b565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a1d919061266b565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a7e919061269f565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610ab49190611e30565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890612745565b60405180910390fd5b60008060008585810190610b659190612765565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9957610b986122d9565b5b601102019050600081600101826010015460038110610bbb57610bba6122d9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cbb5760048360050160006101000a81548160ff02191690836005811115610c5557610c54611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c899190612804565b60405180910390a183836002016000828254610ca5919061269f565b925050819055506001965050505050505061138c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c9190612235565b8b8d610d58919061269f565b6002610d649190612832565b1015905060016005811115610d7c57610d7b611a89565b5b8460050160009054906101000a900460ff166005811115610da057610d9f611a89565b5b03610ec15760008614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906128c0565b60405180910390fd5b8d8015610df25750805b15610e295760028460050160006101000a81548160ff02191690836005811115610e1f57610e1e611a89565b5b0217905550610ebc565b6002836010015410610e9e5760048460050160006101000a81548160ff02191690836005811115610e5d57610e5c611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e91919061292c565b60405180910390a1610ebb565b6001836010016000828254610eb3919061269f565b925050819055505b5b611268565b60026005811115610ed557610ed4611a89565b5b8460050160009054906101000a900460ff166005811115610ef957610ef8611a89565b5b0361101a5760018614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f38906129a6565b60405180910390fd5b8d8015610f4b5750805b15610f825760038460050160006101000a81548160ff02191690836005811115610f7857610f77611a89565b5b0217905550611015565b6002836010015410610ff75760048460050160006101000a81548160ff02191690836005811115610fb657610fb5611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fea919061292c565b60405180910390a1611014565b600183601001600082825461100c919061269f565b925050819055505b5b611267565b6003600581111561102e5761102d611a89565b5b8460050160009054906101000a900460ff16600581111561105257611051611a89565b5b03611266576002861461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190612a12565b60405180910390fd5b8d80156110a45750805b156111d25760058460050160006101000a81548160ff021916908360058111156110d1576110d0611a89565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b876040516111059190611e30565b60405180910390a183603b0160009054906101000a900460ff16156111cd578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118893929190612ab6565b6020604051808303816000875af11580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190612235565b505b611265565b60028360100154106112475760048460050160006101000a81548160ff0219169083600581111561120657611205611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161123a919061292c565b60405180910390a1611264565b600183601001600082825461125c919061269f565b925050819055505b5b5b5b5b6001600581111561127c5761127b611a89565b5b8460050160009054906101000a900460ff1660058111156112a05761129f611a89565b5b036112c6576112c1876000600a87600101546112bc9190612b23565b6116f4565b611380565b600260058111156112da576112d9611a89565b5b8460050160009054906101000a900460ff1660058111156112fe576112fd611a89565b5b036113245761131f876001600a876001015461131a9190612b23565b6116f4565b61137f565b6003600581111561133857611337611a89565b5b8460050160009054906101000a900460ff16600581111561135c5761135b611a89565b5b0361137e5761137d876002600a87600101546113789190612b23565b6116f4565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c0576113bf611a89565b5b8160050160009054906101000a900460ff1660058111156113e4576113e3611a89565b5b148061142457506005808111156113fe576113fd611a89565b5b8160050160009054906101000a900460ff16600581111561142257611421611a89565b5b145b611463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145a90612bec565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114bc573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f3576114f2611a89565b5b8160050160009054906101000a900460ff16600581111561151757611516611a89565b5b14611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90612c7e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e89190612235565b8260070154600a6115f99190612832565b1015905060006301e133808360040154611613919061269f565b421190508161169e5780156116925760048360050160006101000a81548160ff0219169083600581111561164a57611649611a89565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161167e9190612d10565b60405180910390a1600093505050506116ef565b600093505050506116ef565b60018360050160006101000a81548160ff021916908360058111156116c6576116c5611a89565b5b02179055506116e7856000600a86600101546116e29190612b23565b6116f4565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461171e919061266b565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf675984846003015485600801886003811061177f5761177e6122d9565b5b60110201600001546006896003811061179b5761179a6122d9565b5b60020201600c8a600381106117b3576117b26122d9565b5b6002020160028b600381106117cb576117ca6122d9565b5b015460058c600381106117e1576117e06122d9565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161180e93929190612d3e565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611840989796959493929190612e5c565b60206040518083038185885af115801561185e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118839190612235565b9050600082600801856003811061189d5761189c6122d9565b5b6011020190506000816001018260100154600381106118bf576118be6122d9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161191c929190612ee3565b60405180910390a150505050505050565b60405180606001604052806003905b61194461195a565b81526020019060019003908161193c5790505090565b60405180606001604052806003905b611971611987565b8152602001906001900390816119695790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119e9816119d6565b81146119f457600080fd5b50565b600081359050611a06816119e0565b92915050565b600060208284031215611a2257611a216119cc565b5b6000611a30848285016119f7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6482611a39565b9050919050565b611a7481611a59565b82525050565b611a83816119d6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611ac957611ac8611a89565b5b50565b6000819050611ada82611ab8565b919050565b6000611aea82611acc565b9050919050565b611afa81611adf565b82525050565b60008115159050919050565b611b1581611b00565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b55578082015181840152602081019050611b3a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b7d82611b1b565b611b878185611b26565b9350611b97818560208601611b37565b611ba081611b61565b840191505092915050565b600061012082019050611bc1600083018c611a6b565b611bce602083018b611a7a565b611bdb604083018a611a7a565b611be86060830189611a7a565b611bf56080830188611a7a565b611c0260a0830187611af1565b611c0f60c0830186611a7a565b611c1c60e0830185611b0c565b818103610100830152611c2f8184611b72565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6457611c63611c3f565b5b8235905067ffffffffffffffff811115611c8157611c80611c44565b5b602083019150836001820283011115611c9d57611c9c611c49565b5b9250929050565b611cad81611a59565b8114611cb857600080fd5b50565b600081359050611cca81611ca4565b92915050565b600081905082602060030282011115611cec57611ceb611c49565b5b92915050565b611cfb81611b00565b8114611d0657600080fd5b50565b600081359050611d1881611cf2565b92915050565b60008083601f840112611d3457611d33611c3f565b5b8235905067ffffffffffffffff811115611d5157611d50611c44565b5b602083019150836001820283011115611d6d57611d6c611c49565b5b9250929050565b600080600080600080600060e0888a031215611d9357611d926119cc565b5b600088013567ffffffffffffffff811115611db157611db06119d1565b5b611dbd8a828b01611c4e565b97509750506020611dd08a828b01611cbb565b9550506040611de18a828b01611cd0565b94505060a0611df28a828b01611d09565b93505060c088013567ffffffffffffffff811115611e1357611e126119d1565b5b611e1f8a828b01611d1e565b925092505092959891949750929550565b6000602082019050611e456000830184611a7a565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e94816119d6565b82525050565b611ea381611b00565b82525050565b60e082016000820151611ebf6000850182611e8b565b506020820151611ed26020850182611e9a565b506040820151611ee56040850182611e9a565b506060820151611ef86060850182611e8b565b506080820151611f0b6080850182611e8b565b5060a0820151611f1e60a0850182611e9a565b5060c0820151611f3160c0850182611e9a565b50505050565b6000611f438383611ea9565b60e08301905092915050565b6000602082019050919050565b611f6581611e6b565b611f6f8184611e76565b9250611f7a82611e81565b8060005b83811015611fab578151611f928782611f37565b9650611f9d83611f4f565b925050600181019050611f7e565b505050505050565b6000611fbf8383611f5c565b6102a08301905092915050565b6000602082019050919050565b611fe281611e4b565b611fec8184611e56565b9250611ff782611e61565b8060005b8381101561202857815161200f8782611fb3565b965061201a83611fcc565b925050600181019050611ffb565b505050505050565b60006107e0820190506120466000830184611fd9565b92915050565b60008060408385031215612063576120626119cc565b5b6000612071858286016119f7565b9250506020612082858286016119f7565b9150509250929050565b60008060008060008060a087890312156120a9576120a86119cc565b5b60006120b789828a01611d09565b96505060206120c889828a01611d09565b95505060406120d989828a016119f7565b94505060606120ea89828a016119f7565b935050608087013567ffffffffffffffff81111561210b5761210a6119d1565b5b61211789828a01611d1e565b92509250509295509295509295565b600060208201905061213b6000830184611b0c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218857607f821691505b60208210810361219b5761219a612141565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121cd83856121a1565b93506121da8385846121b2565b6121e383611b61565b840190509392505050565b60006040820190506122036000830186611a6b565b81810360208301526122168184866121c1565b9050949350505050565b60008151905061222f816119e0565b92915050565b60006020828403121561224b5761224a6119cc565b5b600061225984828501612220565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061229c826119d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122ce576122cd612262565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612367565b6123ae8683612367565b95508019841693508086168417925050509392505050565b6000819050919050565b60006123eb6123e66123e1846119d6565b6123c6565b6119d6565b9050919050565b6000819050919050565b612405836123d0565b612419612411826123f2565b848454612374565b825550505050565b600090565b61242e612421565b6124398184846123fc565b505050565b5b8181101561245d57612452600082612426565b60018101905061243f565b5050565b601f8211156124a25761247381612342565b61247c84612357565b8101602085101561248b578190505b61249f61249785612357565b83018261243e565b50505b505050565b600082821c905092915050565b60006124c5600019846008026124a7565b1980831691505092915050565b60006124de83836124b4565b9150826002028217905092915050565b6124f88383612308565b67ffffffffffffffff81111561251157612510612313565b5b61251b8254612170565b612526828285612461565b6000601f8311600181146125555760008415612543578287013590505b61254d85826124d2565b8655506125b5565b601f19841661256386612342565b60005b8281101561258b57848901358255600182019150602085019450602081019050612566565b868310156125a857848901356125a4601f8916826124b4565b8355505b6001600288020188555050505b50505050505050565b60006020820190506125d36000830184611a6b565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006126356023836121a1565b9150612640826125d9565b604082019050919050565b6000602082019050818103600083015261266481612628565b9050919050565b6000612676826119d6565b9150612681836119d6565b925082820390508181111561269957612698612262565b5b92915050565b60006126aa826119d6565b91506126b5836119d6565b92508282019050808211156126cd576126cc612262565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061272f6031836121a1565b915061273a826126d3565b604082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b60008060006060848603121561277e5761277d6119cc565b5b600061278c868287016119f7565b935050602061279d868287016119f7565b92505060406127ae868287016119f7565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b60006127ee600e836121a1565b91506127f9826127b8565b602082019050919050565b60006040820190506128196000830184611a7a565b818103602083015261282a816127e1565b905092915050565b600061283d826119d6565b9150612848836119d6565b9250828202612856816119d6565b9150828204841483151761286d5761286c612262565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006128aa6016836121a1565b91506128b582612874565b602082019050919050565b600060208201905081810360008301526128d98161289d565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006129166014836121a1565b9150612921826128e0565b602082019050919050565b60006040820190506129416000830184611a7a565b818103602083015261295281612909565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b60006129906016836121a1565b915061299b8261295a565b602082019050919050565b600060208201905081810360008301526129bf81612983565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b60006129fc6016836121a1565b9150612a07826129c6565b602082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b60008154612a3f81612170565b612a498186611b26565b94506001821660008114612a645760018114612a7a57612aad565b60ff198316865281151560200286019350612aad565b612a8385612342565b60005b83811015612aa557815481890152600182019150602081019050612a86565b808801955050505b50505092915050565b6000606082019050612acb6000830186611a7a565b612ad86020830185611a7a565b8181036040830152612aea8184612a32565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b2e826119d6565b9150612b39836119d6565b925082612b4957612b48612af4565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612bd6604e836121a1565b9150612be182612b54565b606082019050919050565b60006020820190508181036000830152612c0581612bc9565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612c68602b836121a1565b9150612c7382612c0c565b604082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612cfa602d836121a1565b9150612d0582612c9e565b604082019050919050565b6000604082019050612d256000830184611a7a565b8181036020830152612d3681612ced565b905092915050565b6000606082019050612d536000830186611a7a565b612d606020830185611a7a565b612d6d6040830184611a7a565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612da18383611e8b565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612dd7612dd283612dad565b612dba565b9050919050565b6000612dea8254612dc4565b9050919050565b6000600182019050919050565b612e0781612d75565b612e118184612d80565b9250612e1c82612d8b565b8060005b83811015612e5457612e3182612dde565b612e3b8782612d95565b9650612e4683612df1565b925050600181019050612e20565b505050505050565b600061014082019050612e72600083018b611a7a565b612e7f602083018a611a7a565b612e8c6040830189612dfe565b612e996080830188612dfe565b612ea660c0830187611a7a565b612eb360e0830186611b0c565b612ec1610100830185611b0c565b818103610120830152612ed48184611b72565b90509998505050505050505050565b6000604082019050612ef86000830185611a7a565b612f056020830184611a7a565b939250505056fea26469706673582212200da23f568b15dc66f5ab8a942a4ea1dfbf06601c72ec494f9bc3be3ca76e15a664736f6c63430008180033", + "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003513380380620035138339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051613054620004bf60003960008181610341015281816108df01528181610acb01528181610cc501528181611561015261172f01526130546000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a12565b610229565b6040516100bc99989796959493929190611bb1565b60405180910390f35b6100df60048036038101906100da9190611d7a565b610339565b6040516100ec9190611e36565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a12565b6105a3565b6040516101299190612036565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612052565b6108dc565b005b34801561016757600080fd5b50610182600480360381019061017d9190612092565b610ac7565b60405161018f9190611e36565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a12565b61139c565b005b3480156101cd57600080fd5b506101d66114c8565b6040516101e39190611e36565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a12565b6114ce565b604051610220919061212c565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612176565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612176565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce591898c8c866040518563ffffffff1660e01b815260040161039e94939291906122eb565b6020604051808303816000875af11580156103bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e19190612347565b9050600160008154809291906103f6906123a3565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600301819055504281600401819055508760006003811061047b5761047a6123eb565b5b602002013581600801600060038110610497576104966123eb565b5b6011020160000181905550876001600381106104b6576104b56123eb565b5b6020020135816008016001600381106104d2576104d16123eb565b5b6011020160000181905550876002600381106104f1576104f06123eb565b5b60200201358160080160026003811061050d5761050c6123eb565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c01918261055d929190612600565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8460405161058d9190611e36565b60405180910390a1505050979650505050505050565b6105ab611933565b60008060008481526020019081526020016000209050806008016000600381106105d8576105d76123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a8578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f6565b50505050826000600381106106c0576106bf6123eb565b5b6020020181905250806008016001600381106106df576106de6123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156107af578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106fd565b50505050826001600381106107c7576107c66123eb565b5b6020020181905250806008016002600381106107e6576107e56123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610804565b50505050826002600381106108ce576108cd6123eb565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093691906126d0565b602060405180830381865afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190612347565b10156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061275d565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a23919061277d565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a8491906127b1565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610aba9190611e36565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90612857565b60405180910390fd5b60008060008585810190610b6b9190612877565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9f57610b9e6123eb565b5b601102019050600081600101826010015460038110610bc157610bc06123eb565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cc15760048360050160006101000a81548160ff02191690836005811115610c5b57610c5a611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c8f9190612916565b60405180910390a183836002016000828254610cab91906127b1565b9250508190555060019650505050505050611392565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612347565b8b8d610d5e91906127b1565b6002610d6a9190612944565b1015905060016005811115610d8257610d81611a8f565b5b8460050160009054906101000a900460ff166005811115610da657610da5611a8f565b5b03610ec75760008614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906129d2565b60405180910390fd5b8d8015610df85750805b15610e2f5760028460050160006101000a81548160ff02191690836005811115610e2557610e24611a8f565b5b0217905550610ec2565b6002836010015410610ea45760048460050160006101000a81548160ff02191690836005811115610e6357610e62611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e979190612a3e565b60405180910390a1610ec1565b6001836010016000828254610eb991906127b1565b925050819055505b5b61126e565b60026005811115610edb57610eda611a8f565b5b8460050160009054906101000a900460ff166005811115610eff57610efe611a8f565b5b036110205760018614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612ab8565b60405180910390fd5b8d8015610f515750805b15610f885760038460050160006101000a81548160ff02191690836005811115610f7e57610f7d611a8f565b5b021790555061101b565b6002836010015410610ffd5760048460050160006101000a81548160ff02191690836005811115610fbc57610fbb611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610ff09190612a3e565b60405180910390a161101a565b600183601001600082825461101291906127b1565b925050819055505b5b61126d565b6003600581111561103457611033611a8f565b5b8460050160009054906101000a900460ff16600581111561105857611057611a8f565b5b0361126c57600286146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790612b24565b60405180910390fd5b8d80156110aa5750805b156111d85760058460050160006101000a81548160ff021916908360058111156110d7576110d6611a8f565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161110b9190611e36565b60405180910390a183603b0160009054906101000a900460ff16156111d3578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118e93929190612bc8565b6020604051808303816000875af11580156111ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d19190612347565b505b61126b565b600283601001541061124d5760048460050160006101000a81548160ff0219169083600581111561120c5761120b611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112409190612a3e565b60405180910390a161126a565b600183601001600082825461126291906127b1565b925050819055505b5b5b5b5b6001600581111561128257611281611a8f565b5b8460050160009054906101000a900460ff1660058111156112a6576112a5611a8f565b5b036112cc576112c7876000600a87600101546112c29190612c35565b6116fa565b611386565b600260058111156112e0576112df611a8f565b5b8460050160009054906101000a900460ff16600581111561130457611303611a8f565b5b0361132a57611325876001600a87600101546113209190612c35565b6116fa565b611385565b6003600581111561133e5761133d611a8f565b5b8460050160009054906101000a900460ff16600581111561136257611361611a8f565b5b0361138457611383876002600a876001015461137e9190612c35565b6116fa565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c6576113c5611a8f565b5b8160050160009054906101000a900460ff1660058111156113ea576113e9611a8f565b5b148061142a575060058081111561140457611403611a8f565b5b8160050160009054906101000a900460ff16600581111561142857611427611a8f565b5b145b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090612cfe565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114c2573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f9576114f8611a8f565b5b8160050160009054906101000a900460ff16600581111561151d5761151c611a8f565b5b1461155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155490612d90565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612347565b8260070154600a6115ff9190612944565b1015905060006301e13380836004015461161991906127b1565b42119050816116a45780156116985760048360050160006101000a81548160ff021916908360058111156116505761164f611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116849190612e22565b60405180910390a1600093505050506116f5565b600093505050506116f5565b60018360050160006101000a81548160ff021916908360058111156116cc576116cb611a8f565b5b02179055506116ed856000600a86600101546116e89190612c35565b6116fa565b600193505050505b919050565b6000806000858152602001908152602001600020905081816002016000828254611724919061277d565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759848460030154856008018860038110611785576117846123eb565b5b6011020160000154600689600381106117a1576117a06123eb565b5b60020201600c8a600381106117b9576117b86123eb565b5b6002020160028b600381106117d1576117d06123eb565b5b015460058c600381106117e7576117e66123eb565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161181493929190612e50565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611846989796959493929190612f6e565b60206040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118899190612347565b905060008260080185600381106118a3576118a26123eb565b5b6011020190506000816001018260100154600381106118c5576118c46123eb565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611922929190612ff5565b60405180910390a150505050505050565b60405180606001604052806003905b61194a611960565b8152602001906001900390816119425790505090565b60405180606001604052806003905b61197761198d565b81526020019060019003908161196f5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119ef816119dc565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b600060208284031215611a2857611a276119d2565b5b6000611a36848285016119fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6a82611a3f565b9050919050565b611a7a81611a5f565b82525050565b611a89816119dc565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611acf57611ace611a8f565b5b50565b6000819050611ae082611abe565b919050565b6000611af082611ad2565b9050919050565b611b0081611ae5565b82525050565b60008115159050919050565b611b1b81611b06565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5b578082015181840152602081019050611b40565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b8382611b21565b611b8d8185611b2c565b9350611b9d818560208601611b3d565b611ba681611b67565b840191505092915050565b600061012082019050611bc7600083018c611a71565b611bd4602083018b611a80565b611be1604083018a611a80565b611bee6060830189611a80565b611bfb6080830188611a80565b611c0860a0830187611af7565b611c1560c0830186611a80565b611c2260e0830185611b12565b818103610100830152611c358184611b78565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6a57611c69611c45565b5b8235905067ffffffffffffffff811115611c8757611c86611c4a565b5b602083019150836001820283011115611ca357611ca2611c4f565b5b9250929050565b611cb381611a5f565b8114611cbe57600080fd5b50565b600081359050611cd081611caa565b92915050565b600081905082602060030282011115611cf257611cf1611c4f565b5b92915050565b611d0181611b06565b8114611d0c57600080fd5b50565b600081359050611d1e81611cf8565b92915050565b60008083601f840112611d3a57611d39611c45565b5b8235905067ffffffffffffffff811115611d5757611d56611c4a565b5b602083019150836001820283011115611d7357611d72611c4f565b5b9250929050565b600080600080600080600060e0888a031215611d9957611d986119d2565b5b600088013567ffffffffffffffff811115611db757611db66119d7565b5b611dc38a828b01611c54565b97509750506020611dd68a828b01611cc1565b9550506040611de78a828b01611cd6565b94505060a0611df88a828b01611d0f565b93505060c088013567ffffffffffffffff811115611e1957611e186119d7565b5b611e258a828b01611d24565b925092505092959891949750929550565b6000602082019050611e4b6000830184611a80565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e9a816119dc565b82525050565b611ea981611b06565b82525050565b60e082016000820151611ec56000850182611e91565b506020820151611ed86020850182611ea0565b506040820151611eeb6040850182611ea0565b506060820151611efe6060850182611e91565b506080820151611f116080850182611e91565b5060a0820151611f2460a0850182611ea0565b5060c0820151611f3760c0850182611ea0565b50505050565b6000611f498383611eaf565b60e08301905092915050565b6000602082019050919050565b611f6b81611e71565b611f758184611e7c565b9250611f8082611e87565b8060005b83811015611fb1578151611f988782611f3d565b9650611fa383611f55565b925050600181019050611f84565b505050505050565b6000611fc58383611f62565b6102a08301905092915050565b6000602082019050919050565b611fe881611e51565b611ff28184611e5c565b9250611ffd82611e67565b8060005b8381101561202e5781516120158782611fb9565b965061202083611fd2565b925050600181019050612001565b505050505050565b60006107e08201905061204c6000830184611fdf565b92915050565b60008060408385031215612069576120686119d2565b5b6000612077858286016119fd565b9250506020612088858286016119fd565b9150509250929050565b60008060008060008060a087890312156120af576120ae6119d2565b5b60006120bd89828a01611d0f565b96505060206120ce89828a01611d0f565b95505060406120df89828a016119fd565b94505060606120f089828a016119fd565b935050608087013567ffffffffffffffff811115612111576121106119d7565b5b61211d89828a01611d24565b92509250509295509295509295565b60006020820190506121416000830184611b12565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218e57607f821691505b6020821081036121a1576121a0612147565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121d383856121a7565b93506121e08385846121b8565b6121e983611b67565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61223381612220565b82525050565b60408201600082015161224f600085018261222a565b5060208201516122626020850182611e91565b50505050565b60006122748383612239565b60408301905092915050565b6000602082019050919050565b6000612298826121f4565b6122a281856121ff565b93506122ad83612210565b8060005b838110156122de5781516122c58882612268565b97506122d083612280565b9250506001810190506122b1565b5085935050505092915050565b60006060820190506123006000830187611a71565b81810360208301526123138185876121c7565b90508181036040830152612327818461228d565b905095945050505050565b600081519050612341816119e6565b92915050565b60006020828403121561235d5761235c6119d2565b5b600061236b84828501612332565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ae826119dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123e0576123df612374565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612479565b6124c08683612479565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fd6124f86124f3846119dc565b6124d8565b6119dc565b9050919050565b6000819050919050565b612517836124e2565b61252b61252382612504565b848454612486565b825550505050565b600090565b612540612533565b61254b81848461250e565b505050565b5b8181101561256f57612564600082612538565b600181019050612551565b5050565b601f8211156125b45761258581612454565b61258e84612469565b8101602085101561259d578190505b6125b16125a985612469565b830182612550565b50505b505050565b600082821c905092915050565b60006125d7600019846008026125b9565b1980831691505092915050565b60006125f083836125c6565b9150826002028217905092915050565b61260a838361241a565b67ffffffffffffffff81111561262357612622612425565b5b61262d8254612176565b612638828285612573565b6000601f8311600181146126675760008415612655578287013590505b61265f85826125e4565b8655506126c7565b601f19841661267586612454565b60005b8281101561269d57848901358255600182019150602085019450602081019050612678565b868310156126ba57848901356126b6601f8916826125c6565b8355505b6001600288020188555050505b50505050505050565b60006020820190506126e56000830184611a71565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006127476023836121a7565b9150612752826126eb565b604082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b6000612788826119dc565b9150612793836119dc565b92508282039050818111156127ab576127aa612374565b5b92915050565b60006127bc826119dc565b91506127c7836119dc565b92508282019050808211156127df576127de612374565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128416031836121a7565b915061284c826127e5565b604082019050919050565b6000602082019050818103600083015261287081612834565b9050919050565b6000806000606084860312156128905761288f6119d2565b5b600061289e868287016119fd565b93505060206128af868287016119fd565b92505060406128c0868287016119fd565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612900600e836121a7565b915061290b826128ca565b602082019050919050565b600060408201905061292b6000830184611a80565b818103602083015261293c816128f3565b905092915050565b600061294f826119dc565b915061295a836119dc565b9250828202612968816119dc565b9150828204841483151761297f5761297e612374565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006129bc6016836121a7565b91506129c782612986565b602082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612a286014836121a7565b9150612a33826129f2565b602082019050919050565b6000604082019050612a536000830184611a80565b8181036020830152612a6481612a1b565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612aa26016836121a7565b9150612aad82612a6c565b602082019050919050565b60006020820190508181036000830152612ad181612a95565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612b0e6016836121a7565b9150612b1982612ad8565b602082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b60008154612b5181612176565b612b5b8186611b2c565b94506001821660008114612b765760018114612b8c57612bbf565b60ff198316865281151560200286019350612bbf565b612b9585612454565b60005b83811015612bb757815481890152600182019150602081019050612b98565b808801955050505b50505092915050565b6000606082019050612bdd6000830186611a80565b612bea6020830185611a80565b8181036040830152612bfc8184612b44565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c40826119dc565b9150612c4b836119dc565b925082612c5b57612c5a612c06565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ce8604e836121a7565b9150612cf382612c66565b606082019050919050565b60006020820190508181036000830152612d1781612cdb565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d7a602b836121a7565b9150612d8582612d1e565b604082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612e0c602d836121a7565b9150612e1782612db0565b604082019050919050565b6000604082019050612e376000830184611a80565b8181036020830152612e4881612dff565b905092915050565b6000606082019050612e656000830186611a80565b612e726020830185611a80565b612e7f6040830184611a80565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612eb38383611e91565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612ee9612ee483612ebf565b612ecc565b9050919050565b6000612efc8254612ed6565b9050919050565b6000600182019050919050565b612f1981612e87565b612f238184612e92565b9250612f2e82612e9d565b8060005b83811015612f6657612f4382612ef0565b612f4d8782612ea7565b9650612f5883612f03565b925050600181019050612f32565b505050505050565b600061014082019050612f84600083018b611a80565b612f91602083018a611a80565b612f9e6040830189612f10565b612fab6080830188612f10565b612fb860c0830187611a80565b612fc560e0830186611b12565b612fd3610100830185611b12565b818103610120830152612fe68184611b78565b90509998505050505050505050565b600060408201905061300a6000830185611a80565b6130176020830184611a80565b939250505056fea26469706673582212205ae7bad7fad5f80d16cc9857994bdd4172ff56c8f4213a2ee47addaa19e09f9f64736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a12565b610229565b6040516100bc99989796959493929190611bb1565b60405180910390f35b6100df60048036038101906100da9190611d7a565b610339565b6040516100ec9190611e36565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a12565b6105a3565b6040516101299190612036565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612052565b6108dc565b005b34801561016757600080fd5b50610182600480360381019061017d9190612092565b610ac7565b60405161018f9190611e36565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a12565b61139c565b005b3480156101cd57600080fd5b506101d66114c8565b6040516101e39190611e36565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a12565b6114ce565b604051610220919061212c565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612176565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612176565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce591898c8c866040518563ffffffff1660e01b815260040161039e94939291906122eb565b6020604051808303816000875af11580156103bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e19190612347565b9050600160008154809291906103f6906123a3565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600301819055504281600401819055508760006003811061047b5761047a6123eb565b5b602002013581600801600060038110610497576104966123eb565b5b6011020160000181905550876001600381106104b6576104b56123eb565b5b6020020135816008016001600381106104d2576104d16123eb565b5b6011020160000181905550876002600381106104f1576104f06123eb565b5b60200201358160080160026003811061050d5761050c6123eb565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c01918261055d929190612600565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8460405161058d9190611e36565b60405180910390a1505050979650505050505050565b6105ab611933565b60008060008481526020019081526020016000209050806008016000600381106105d8576105d76123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a8578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f6565b50505050826000600381106106c0576106bf6123eb565b5b6020020181905250806008016001600381106106df576106de6123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156107af578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106fd565b50505050826001600381106107c7576107c66123eb565b5b6020020181905250806008016002600381106107e6576107e56123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610804565b50505050826002600381106108ce576108cd6123eb565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093691906126d0565b602060405180830381865afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190612347565b10156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061275d565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a23919061277d565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a8491906127b1565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610aba9190611e36565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90612857565b60405180910390fd5b60008060008585810190610b6b9190612877565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9f57610b9e6123eb565b5b601102019050600081600101826010015460038110610bc157610bc06123eb565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cc15760048360050160006101000a81548160ff02191690836005811115610c5b57610c5a611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c8f9190612916565b60405180910390a183836002016000828254610cab91906127b1565b9250508190555060019650505050505050611392565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612347565b8b8d610d5e91906127b1565b6002610d6a9190612944565b1015905060016005811115610d8257610d81611a8f565b5b8460050160009054906101000a900460ff166005811115610da657610da5611a8f565b5b03610ec75760008614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906129d2565b60405180910390fd5b8d8015610df85750805b15610e2f5760028460050160006101000a81548160ff02191690836005811115610e2557610e24611a8f565b5b0217905550610ec2565b6002836010015410610ea45760048460050160006101000a81548160ff02191690836005811115610e6357610e62611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e979190612a3e565b60405180910390a1610ec1565b6001836010016000828254610eb991906127b1565b925050819055505b5b61126e565b60026005811115610edb57610eda611a8f565b5b8460050160009054906101000a900460ff166005811115610eff57610efe611a8f565b5b036110205760018614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612ab8565b60405180910390fd5b8d8015610f515750805b15610f885760038460050160006101000a81548160ff02191690836005811115610f7e57610f7d611a8f565b5b021790555061101b565b6002836010015410610ffd5760048460050160006101000a81548160ff02191690836005811115610fbc57610fbb611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610ff09190612a3e565b60405180910390a161101a565b600183601001600082825461101291906127b1565b925050819055505b5b61126d565b6003600581111561103457611033611a8f565b5b8460050160009054906101000a900460ff16600581111561105857611057611a8f565b5b0361126c57600286146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790612b24565b60405180910390fd5b8d80156110aa5750805b156111d85760058460050160006101000a81548160ff021916908360058111156110d7576110d6611a8f565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161110b9190611e36565b60405180910390a183603b0160009054906101000a900460ff16156111d3578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118e93929190612bc8565b6020604051808303816000875af11580156111ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d19190612347565b505b61126b565b600283601001541061124d5760048460050160006101000a81548160ff0219169083600581111561120c5761120b611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112409190612a3e565b60405180910390a161126a565b600183601001600082825461126291906127b1565b925050819055505b5b5b5b5b6001600581111561128257611281611a8f565b5b8460050160009054906101000a900460ff1660058111156112a6576112a5611a8f565b5b036112cc576112c7876000600a87600101546112c29190612c35565b6116fa565b611386565b600260058111156112e0576112df611a8f565b5b8460050160009054906101000a900460ff16600581111561130457611303611a8f565b5b0361132a57611325876001600a87600101546113209190612c35565b6116fa565b611385565b6003600581111561133e5761133d611a8f565b5b8460050160009054906101000a900460ff16600581111561136257611361611a8f565b5b0361138457611383876002600a876001015461137e9190612c35565b6116fa565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c6576113c5611a8f565b5b8160050160009054906101000a900460ff1660058111156113ea576113e9611a8f565b5b148061142a575060058081111561140457611403611a8f565b5b8160050160009054906101000a900460ff16600581111561142857611427611a8f565b5b145b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090612cfe565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114c2573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f9576114f8611a8f565b5b8160050160009054906101000a900460ff16600581111561151d5761151c611a8f565b5b1461155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155490612d90565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612347565b8260070154600a6115ff9190612944565b1015905060006301e13380836004015461161991906127b1565b42119050816116a45780156116985760048360050160006101000a81548160ff021916908360058111156116505761164f611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116849190612e22565b60405180910390a1600093505050506116f5565b600093505050506116f5565b60018360050160006101000a81548160ff021916908360058111156116cc576116cb611a8f565b5b02179055506116ed856000600a86600101546116e89190612c35565b6116fa565b600193505050505b919050565b6000806000858152602001908152602001600020905081816002016000828254611724919061277d565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759848460030154856008018860038110611785576117846123eb565b5b6011020160000154600689600381106117a1576117a06123eb565b5b60020201600c8a600381106117b9576117b86123eb565b5b6002020160028b600381106117d1576117d06123eb565b5b015460058c600381106117e7576117e66123eb565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161181493929190612e50565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611846989796959493929190612f6e565b60206040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118899190612347565b905060008260080185600381106118a3576118a26123eb565b5b6011020190506000816001018260100154600381106118c5576118c46123eb565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611922929190612ff5565b60405180910390a150505050505050565b60405180606001604052806003905b61194a611960565b8152602001906001900390816119425790505090565b60405180606001604052806003905b61197761198d565b81526020019060019003908161196f5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119ef816119dc565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b600060208284031215611a2857611a276119d2565b5b6000611a36848285016119fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6a82611a3f565b9050919050565b611a7a81611a5f565b82525050565b611a89816119dc565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611acf57611ace611a8f565b5b50565b6000819050611ae082611abe565b919050565b6000611af082611ad2565b9050919050565b611b0081611ae5565b82525050565b60008115159050919050565b611b1b81611b06565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5b578082015181840152602081019050611b40565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b8382611b21565b611b8d8185611b2c565b9350611b9d818560208601611b3d565b611ba681611b67565b840191505092915050565b600061012082019050611bc7600083018c611a71565b611bd4602083018b611a80565b611be1604083018a611a80565b611bee6060830189611a80565b611bfb6080830188611a80565b611c0860a0830187611af7565b611c1560c0830186611a80565b611c2260e0830185611b12565b818103610100830152611c358184611b78565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6a57611c69611c45565b5b8235905067ffffffffffffffff811115611c8757611c86611c4a565b5b602083019150836001820283011115611ca357611ca2611c4f565b5b9250929050565b611cb381611a5f565b8114611cbe57600080fd5b50565b600081359050611cd081611caa565b92915050565b600081905082602060030282011115611cf257611cf1611c4f565b5b92915050565b611d0181611b06565b8114611d0c57600080fd5b50565b600081359050611d1e81611cf8565b92915050565b60008083601f840112611d3a57611d39611c45565b5b8235905067ffffffffffffffff811115611d5757611d56611c4a565b5b602083019150836001820283011115611d7357611d72611c4f565b5b9250929050565b600080600080600080600060e0888a031215611d9957611d986119d2565b5b600088013567ffffffffffffffff811115611db757611db66119d7565b5b611dc38a828b01611c54565b97509750506020611dd68a828b01611cc1565b9550506040611de78a828b01611cd6565b94505060a0611df88a828b01611d0f565b93505060c088013567ffffffffffffffff811115611e1957611e186119d7565b5b611e258a828b01611d24565b925092505092959891949750929550565b6000602082019050611e4b6000830184611a80565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e9a816119dc565b82525050565b611ea981611b06565b82525050565b60e082016000820151611ec56000850182611e91565b506020820151611ed86020850182611ea0565b506040820151611eeb6040850182611ea0565b506060820151611efe6060850182611e91565b506080820151611f116080850182611e91565b5060a0820151611f2460a0850182611ea0565b5060c0820151611f3760c0850182611ea0565b50505050565b6000611f498383611eaf565b60e08301905092915050565b6000602082019050919050565b611f6b81611e71565b611f758184611e7c565b9250611f8082611e87565b8060005b83811015611fb1578151611f988782611f3d565b9650611fa383611f55565b925050600181019050611f84565b505050505050565b6000611fc58383611f62565b6102a08301905092915050565b6000602082019050919050565b611fe881611e51565b611ff28184611e5c565b9250611ffd82611e67565b8060005b8381101561202e5781516120158782611fb9565b965061202083611fd2565b925050600181019050612001565b505050505050565b60006107e08201905061204c6000830184611fdf565b92915050565b60008060408385031215612069576120686119d2565b5b6000612077858286016119fd565b9250506020612088858286016119fd565b9150509250929050565b60008060008060008060a087890312156120af576120ae6119d2565b5b60006120bd89828a01611d0f565b96505060206120ce89828a01611d0f565b95505060406120df89828a016119fd565b94505060606120f089828a016119fd565b935050608087013567ffffffffffffffff811115612111576121106119d7565b5b61211d89828a01611d24565b92509250509295509295509295565b60006020820190506121416000830184611b12565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218e57607f821691505b6020821081036121a1576121a0612147565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121d383856121a7565b93506121e08385846121b8565b6121e983611b67565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61223381612220565b82525050565b60408201600082015161224f600085018261222a565b5060208201516122626020850182611e91565b50505050565b60006122748383612239565b60408301905092915050565b6000602082019050919050565b6000612298826121f4565b6122a281856121ff565b93506122ad83612210565b8060005b838110156122de5781516122c58882612268565b97506122d083612280565b9250506001810190506122b1565b5085935050505092915050565b60006060820190506123006000830187611a71565b81810360208301526123138185876121c7565b90508181036040830152612327818461228d565b905095945050505050565b600081519050612341816119e6565b92915050565b60006020828403121561235d5761235c6119d2565b5b600061236b84828501612332565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ae826119dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123e0576123df612374565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612479565b6124c08683612479565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fd6124f86124f3846119dc565b6124d8565b6119dc565b9050919050565b6000819050919050565b612517836124e2565b61252b61252382612504565b848454612486565b825550505050565b600090565b612540612533565b61254b81848461250e565b505050565b5b8181101561256f57612564600082612538565b600181019050612551565b5050565b601f8211156125b45761258581612454565b61258e84612469565b8101602085101561259d578190505b6125b16125a985612469565b830182612550565b50505b505050565b600082821c905092915050565b60006125d7600019846008026125b9565b1980831691505092915050565b60006125f083836125c6565b9150826002028217905092915050565b61260a838361241a565b67ffffffffffffffff81111561262357612622612425565b5b61262d8254612176565b612638828285612573565b6000601f8311600181146126675760008415612655578287013590505b61265f85826125e4565b8655506126c7565b601f19841661267586612454565b60005b8281101561269d57848901358255600182019150602085019450602081019050612678565b868310156126ba57848901356126b6601f8916826125c6565b8355505b6001600288020188555050505b50505050505050565b60006020820190506126e56000830184611a71565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006127476023836121a7565b9150612752826126eb565b604082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b6000612788826119dc565b9150612793836119dc565b92508282039050818111156127ab576127aa612374565b5b92915050565b60006127bc826119dc565b91506127c7836119dc565b92508282019050808211156127df576127de612374565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128416031836121a7565b915061284c826127e5565b604082019050919050565b6000602082019050818103600083015261287081612834565b9050919050565b6000806000606084860312156128905761288f6119d2565b5b600061289e868287016119fd565b93505060206128af868287016119fd565b92505060406128c0868287016119fd565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612900600e836121a7565b915061290b826128ca565b602082019050919050565b600060408201905061292b6000830184611a80565b818103602083015261293c816128f3565b905092915050565b600061294f826119dc565b915061295a836119dc565b9250828202612968816119dc565b9150828204841483151761297f5761297e612374565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006129bc6016836121a7565b91506129c782612986565b602082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612a286014836121a7565b9150612a33826129f2565b602082019050919050565b6000604082019050612a536000830184611a80565b8181036020830152612a6481612a1b565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612aa26016836121a7565b9150612aad82612a6c565b602082019050919050565b60006020820190508181036000830152612ad181612a95565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612b0e6016836121a7565b9150612b1982612ad8565b602082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b60008154612b5181612176565b612b5b8186611b2c565b94506001821660008114612b765760018114612b8c57612bbf565b60ff198316865281151560200286019350612bbf565b612b9585612454565b60005b83811015612bb757815481890152600182019150602081019050612b98565b808801955050505b50505092915050565b6000606082019050612bdd6000830186611a80565b612bea6020830185611a80565b8181036040830152612bfc8184612b44565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c40826119dc565b9150612c4b836119dc565b925082612c5b57612c5a612c06565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ce8604e836121a7565b9150612cf382612c66565b606082019050919050565b60006020820190508181036000830152612d1781612cdb565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d7a602b836121a7565b9150612d8582612d1e565b604082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612e0c602d836121a7565b9150612e1782612db0565b604082019050919050565b6000604082019050612e376000830184611a80565b8181036020830152612e4881612dff565b905092915050565b6000606082019050612e656000830186611a80565b612e726020830185611a80565b612e7f6040830184611a80565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612eb38383611e91565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612ee9612ee483612ebf565b612ecc565b9050919050565b6000612efc8254612ed6565b9050919050565b6000600182019050919050565b612f1981612e87565b612f238184612e92565b9250612f2e82612e9d565b8060005b83811015612f6657612f4382612ef0565b612f4d8782612ea7565b9650612f5883612f03565b925050600181019050612f32565b505050505050565b600061014082019050612f84600083018b611a80565b612f91602083018a611a80565b612f9e6040830189612f10565b612fab6080830188612f10565b612fb860c0830187611a80565b612fc560e0830186611b12565b612fd3610100830185611b12565b818103610120830152612fe68184611b78565b90509998505050505050505050565b600060408201905061300a6000830185611a80565b6130176020830184611a80565b939250505056fea26469706673582212205ae7bad7fad5f80d16cc9857994bdd4172ff56c8f4213a2ee47addaa19e09f9f64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index fcb9e32..ffacca8 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -263,19 +263,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeIndex", - "type": "uint256" - } - ], - "name": "reclaimAvailability", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "requestCount", @@ -393,11 +380,6 @@ "internalType": "bool", "name": "assigned", "type": "bool" - }, - { - "internalType": "bool", - "name": "reclaimed", - "type": "bool" } ], "stateMutability": "view", @@ -432,6 +414,23 @@ "internalType": "string", "name": "evidenceContentId", "type": "string" + }, + { + "components": [ + { + "internalType": "int256", + "name": "weightPercent", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "targetPostIndex", + "type": "uint256" + } + ], + "internalType": "struct Citation[]", + "name": "citations", + "type": "tuple[]" } ], "name": "submitWorkEvidence", @@ -440,8 +439,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002c1038038062002c108339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516129c26200024e6000396000818161091101528181610cef01528181610df10152610ed001526129c26000f3fe6080604052600436106100e85760003560e01c8063854b6a4f1161008a578063c4a9e11611610059578063c4a9e116146102c8578063cf376256146102f3578063d5a44f8614610331578063d76b679414610372576100e8565b8063854b6a4f1461022f57806399ad6c5614610258578063a035b1fe14610274578063b5b20c001461029f576100e8565b80635badbe4c116100c65780635badbe4c1461015b5780638150d50714610186578063815a0572146101af57806381d12c58146101ec576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635b5cf6d414610132575b600080fd5b61010760048036038101906101029190611589565b61039d565b005b34801561011557600080fd5b50610130600480360381019061012b919061166a565b61048b565b005b34801561013e57600080fd5b50610159600480360381019061015491906116bd565b61059e565b005b34801561016757600080fd5b50610170610759565b60405161017d919061172c565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611747565b61075f565b005b3480156101bb57600080fd5b506101d660048036038101906101d191906117ca565b6109ed565b6040516101e3919061172c565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611747565b610a6c565b604051610226979695949392919061196f565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190611a18565b610bf8565b005b610272600480360381019061026d9190611a7a565b610f6a565b005b34801561028057600080fd5b506102896110b3565b604051610296919061172c565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611aee565b6110b9565b005b3480156102d457600080fd5b506102dd611280565b6040516102ea919061172c565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190611747565b611286565b604051610328929190611b2e565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190611747565b6112aa565b604051610369959493929190611b57565b60405180910390f35b34801561037e57600080fd5b5061038761131a565b604051610394919061172c565b60405180910390f35b6001543410156103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990611bf6565b60405180910390fd5b6000600760008154809291906103f790611c45565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061046982611320565b81600301819055508383826004019182610484929190611ed3565b5050505050565b600082116104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c590611fef565b60405180910390fd5b6000600560008154809291906104e390611c45565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055508242610558919061200f565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161058f919061172c565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105c9576105c861184d565b5b8160020160009054906101000a900460ff1660038111156105ed576105ec61184d565b5b1461062d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106249061208f565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d190612121565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156107025761070161184d565b5b0217905550838383600501918261071a929190611ed3565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161074a919061172c565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff906121b3565b60405180910390fd5b8060020154421161084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084590612245565b60405180910390fd5b8060030160019054906101000a900460ff16156108a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610897906122b1565b60405180910390fd5b8060030160009054906101000a900460ff16156108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990612343565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161096e929190612363565b6020604051808303816000875af115801561098d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b191906123a1565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109e1919061172c565b60405180910390a15050565b60008083838101906109ff9190611747565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610a56929190611b2e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610ad490611cf6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090611cf6565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b505050505090806005018054610b6290611cf6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90611cf6565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c2357610c2261184d565b5b8160020160009054906101000a900460ff166003811115610c4757610c4661184d565b5b14610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061241a565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610cca57610cc961184d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d6f9291906124be565b6020604051808303816000875af1158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190612503565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610de5929190612530565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610e899796959493929190612676565b60206040518083038185885af1158015610ea7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ecc9190612503565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610f30939291906126fb565b600060405180830381600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f7f90611c45565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610ff9919061172c565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401611029969594939291906127cb565b60206040518083038185885af1158015611047573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061106c9190612503565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c826040516110a3919061172c565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906128a0565b60405180910390fd5b8060030160019054906101000a900460ff16156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906122b1565b60405180910390fd5b8060030160009054906101000a900460ff1615611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90612343565b60405180910390fd5b806002015442111561122b57814261121e919061200f565b8160020181905550611244565b81816002015461123b919061200f565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051611273919061172c565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b600061132a61139f565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611391929190611b2e565b60405180910390a150919050565b60008060005b600554811015611426576004600082815260200190815260200160002060030160009054906101000a900460ff16611419576004600082815260200190815260200160002060020154421161141957600460008281526020019081526020016000206001015482611416919061200f565b91505b80806001019150506113a5565b506000811161146a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114619061290c565b60405180910390fd5b60008144611478919061295b565b9050600080600090505b600554811015611513576004600082815260200190815260200160002060030160009054906101000a900460ff166115065760046000828152602001908152602001600020600201544211611506576004600082815260200190815260200160002060010154826114f3919061200f565b91508282111561150557809450611513565b5b8080600101915050611482565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261154957611548611524565b5b8235905067ffffffffffffffff81111561156657611565611529565b5b6020830191508360018202830111156115825761158161152e565b5b9250929050565b600080602083850312156115a05761159f61151a565b5b600083013567ffffffffffffffff8111156115be576115bd61151f565b5b6115ca85828601611533565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611601826115d6565b9050919050565b611611816115f6565b811461161c57600080fd5b50565b60008135905061162e81611608565b92915050565b6000819050919050565b61164781611634565b811461165257600080fd5b50565b6000813590506116648161163e565b92915050565b6000806000606084860312156116835761168261151a565b5b60006116918682870161161f565b93505060206116a286828701611655565b92505060406116b386828701611655565b9150509250925092565b6000806000604084860312156116d6576116d561151a565b5b60006116e486828701611655565b935050602084013567ffffffffffffffff8111156117055761170461151f565b5b61171186828701611533565b92509250509250925092565b61172681611634565b82525050565b6000602082019050611741600083018461171d565b92915050565b60006020828403121561175d5761175c61151a565b5b600061176b84828501611655565b91505092915050565b60008083601f84011261178a57611789611524565b5b8235905067ffffffffffffffff8111156117a7576117a6611529565b5b6020830191508360018202830111156117c3576117c261152e565b5b9250929050565b600080600080606085870312156117e4576117e361151a565b5b60006117f287828801611655565b945050602061180387828801611655565b935050604085013567ffffffffffffffff8111156118245761182361151f565b5b61183087828801611774565b925092505092959194509250565b611847816115f6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061188d5761188c61184d565b5b50565b600081905061189e8261187c565b919050565b60006118ae82611890565b9050919050565b6118be816118a3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118fe5780820151818401526020810190506118e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611926826118c4565b61193081856118cf565b93506119408185602086016118e0565b6119498161190a565b840191505092915050565b60008115159050919050565b61196981611954565b82525050565b600060e082019050611984600083018a61183e565b611991602083018961171d565b61199e60408301886118b5565b6119ab606083018761171d565b81810360808301526119bd818661191b565b905081810360a08301526119d1818561191b565b90506119e060c0830184611960565b98975050505050505050565b6119f581611954565b8114611a0057600080fd5b50565b600081359050611a12816119ec565b92915050565b60008060408385031215611a2f57611a2e61151a565b5b6000611a3d85828601611655565b9250506020611a4e85828601611a03565b9150509250929050565b600081905082602060030282011115611a7457611a7361152e565b5b92915050565b60008060008060a08587031215611a9457611a9361151a565b5b6000611aa287828801611655565b945050602085013567ffffffffffffffff811115611ac357611ac261151f565b5b611acf87828801611533565b93509350506040611ae287828801611a58565b91505092959194509250565b60008060408385031215611b0557611b0461151a565b5b6000611b1385828601611655565b9250506020611b2485828601611655565b9150509250929050565b6000604082019050611b43600083018561171d565b611b50602083018461171d565b9392505050565b600060a082019050611b6c600083018861183e565b611b79602083018761171d565b611b86604083018661171d565b611b936060830185611960565b611ba06080830184611960565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611be06010836118cf565b9150611beb82611baa565b602082019050919050565b60006020820190508181036000830152611c0f81611bd3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c5082611634565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c8257611c81611c16565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d0e57607f821691505b602082108103611d2157611d20611cc7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d4c565b611d938683611d4c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611dd0611dcb611dc684611634565b611dab565b611634565b9050919050565b6000819050919050565b611dea83611db5565b611dfe611df682611dd7565b848454611d59565b825550505050565b600090565b611e13611e06565b611e1e818484611de1565b505050565b5b81811015611e4257611e37600082611e0b565b600181019050611e24565b5050565b601f821115611e8757611e5881611d27565b611e6184611d3c565b81016020851015611e70578190505b611e84611e7c85611d3c565b830182611e23565b50505b505050565b600082821c905092915050565b6000611eaa60001984600802611e8c565b1980831691505092915050565b6000611ec38383611e99565b9150826002028217905092915050565b611edd8383611c8d565b67ffffffffffffffff811115611ef657611ef5611c98565b5b611f008254611cf6565b611f0b828285611e46565b6000601f831160018114611f3a5760008415611f28578287013590505b611f328582611eb7565b865550611f9a565b601f198416611f4886611d27565b60005b82811015611f7057848901358255600182019150602085019450602081019050611f4b565b86831015611f8d5784890135611f89601f891682611e99565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fd96011836118cf565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b600061201a82611634565b915061202583611634565b925082820190508082111561203d5761203c611c16565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006120796018836118cf565b915061208482612043565b602082019050919050565b600060208201905081810360008301526120a88161206c565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061210b603a836118cf565b9150612116826120af565b604082019050919050565b6000602082019050818103600083015261213a816120fe565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061219d6034836118cf565b91506121a882612141565b604082019050919050565b600060208201905081810360008301526121cc81612190565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061222f6022836118cf565b915061223a826121d3565b604082019050919050565b6000602082019050818103600083015261225e81612222565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061229b6020836118cf565b91506122a682612265565b602082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061232d6024836118cf565b9150612338826122d1565b604082019050919050565b6000602082019050818103600083015261235c81612320565b9050919050565b6000604082019050612378600083018561183e565b612385602083018461171d565b9392505050565b60008151905061239b816119ec565b92915050565b6000602082840312156123b7576123b661151a565b5b60006123c58482850161238c565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006124046020836118cf565b915061240f826123ce565b602082019050919050565b60006020820190508181036000830152612433816123f7565b9050919050565b6000815461244781611cf6565b61245181866118cf565b9450600182166000811461246c5760018114612482576124b5565b60ff1983168652811515602002860193506124b5565b61248b85611d27565b60005b838110156124ad5781548189015260018201915060208101905061248e565b808801955050505b50505092915050565b60006040820190506124d3600083018561183e565b81810360208301526124e5818461243a565b90509392505050565b6000815190506124fd8161163e565b92915050565b6000602082840312156125195761251861151a565b5b6000612527848285016124ee565b91505092915050565b6000604082019050612545600083018561171d565b6125526020830184611960565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61258281611634565b82525050565b60006125948383612579565b60208301905092915050565b6000602082019050919050565b6125b681612559565b6125c08184612564565b92506125cb8261256f565b8060005b838110156125fc5781516125e38782612588565b96506125ee836125a0565b9250506001810190506125cf565b505050505050565b6000819050919050565b600061262961262461261f84612604565b611dab565b611634565b9050919050565b6126398161260e565b82525050565b600082825260208201905092915050565b50565b600061266060008361263f565b915061266b82612650565b600082019050919050565b60006101408201905061268c600083018a61171d565b612699602083018961171d565b6126a660408301886125ad565b6126b360808301876125ad565b6126c060c0830186612630565b6126cd60e0830185611960565b6126db610100830184611960565b8181036101208301526126ed81612653565b905098975050505050505050565b6000606082019050612710600083018661171d565b61271d602083018561171d565b61272a6040830184611960565b949350505050565b82818337600083830152505050565b600061274d83856118cf565b935061275a838584612732565b6127638361190a565b840190509392505050565b82818337505050565b6127836060838361276e565b5050565b600081519050919050565b600061279d82612787565b6127a7818561263f565b93506127b78185602086016118e0565b6127c08161190a565b840191505092915050565b600060e08201905081810360008301526127e681888a612741565b90506127f5602083018761183e565b6128026040830186612777565b61280f60a0830185611960565b81810360c08301526128218184612792565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061288a6033836118cf565b91506128958261282e565b604082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128f6601a836118cf565b9150612901826128c0565b602082019050919050565b60006020820190508181036000830152612925816128e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061296682611634565b915061297183611634565b9250826129815761298061292c565b5b82820690509291505056fea26469706673582212201e34c72c2def9992a23a4a7ba8e9881ca4f623b5c5ae967333715de2fe7b2e6e64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063854b6a4f1161008a578063c4a9e11611610059578063c4a9e116146102c8578063cf376256146102f3578063d5a44f8614610331578063d76b679414610372576100e8565b8063854b6a4f1461022f57806399ad6c5614610258578063a035b1fe14610274578063b5b20c001461029f576100e8565b80635badbe4c116100c65780635badbe4c1461015b5780638150d50714610186578063815a0572146101af57806381d12c58146101ec576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635b5cf6d414610132575b600080fd5b61010760048036038101906101029190611589565b61039d565b005b34801561011557600080fd5b50610130600480360381019061012b919061166a565b61048b565b005b34801561013e57600080fd5b50610159600480360381019061015491906116bd565b61059e565b005b34801561016757600080fd5b50610170610759565b60405161017d919061172c565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611747565b61075f565b005b3480156101bb57600080fd5b506101d660048036038101906101d191906117ca565b6109ed565b6040516101e3919061172c565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611747565b610a6c565b604051610226979695949392919061196f565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190611a18565b610bf8565b005b610272600480360381019061026d9190611a7a565b610f6a565b005b34801561028057600080fd5b506102896110b3565b604051610296919061172c565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190611aee565b6110b9565b005b3480156102d457600080fd5b506102dd611280565b6040516102ea919061172c565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190611747565b611286565b604051610328929190611b2e565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190611747565b6112aa565b604051610369959493929190611b57565b60405180910390f35b34801561037e57600080fd5b5061038761131a565b604051610394919061172c565b60405180910390f35b6001543410156103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990611bf6565b60405180910390fd5b6000600760008154809291906103f790611c45565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061046982611320565b81600301819055508383826004019182610484929190611ed3565b5050505050565b600082116104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c590611fef565b60405180910390fd5b6000600560008154809291906104e390611c45565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055508242610558919061200f565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161058f919061172c565b60405180910390a15050505050565b6000600660008581526020019081526020016000209050600060038111156105c9576105c861184d565b5b8160020160009054906101000a900460ff1660038111156105ed576105ec61184d565b5b1461062d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106249061208f565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d190612121565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156107025761070161184d565b5b0217905550838383600501918261071a929190611ed3565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161074a919061172c565b60405180910390a15050505050565b60075481565b60006004600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff906121b3565b60405180910390fd5b8060020154421161084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084590612245565b60405180910390fd5b8060030160019054906101000a900460ff16156108a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610897906122b1565b60405180910390fd5b8060030160009054906101000a900460ff16156108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990612343565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161096e929190612363565b6020604051808303816000875af115801561098d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b191906123a1565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109e1919061172c565b60405180910390a15050565b60008083838101906109ff9190611747565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610a56929190611b2e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff1690806003015490806004018054610ad490611cf6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090611cf6565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b505050505090806005018054610b6290611cf6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90611cf6565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060066000848152602001908152602001600020905060016003811115610c2357610c2261184d565b5b8160020160009054906101000a900460ff166003811115610c4757610c4661184d565b5b14610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061241a565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610cca57610cc961184d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610d6f9291906124be565b6020604051808303816000875af1158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190612503565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610de5929190612530565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610e899796959493929190612676565b60206040518083038185885af1158015610ea7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ecc9190612503565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610f30939291906126fb565b600060405180830381600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610f7f90611c45565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610ff9919061172c565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401611029969594939291906127cb565b60206040518083038185885af1158015611047573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061106c9190612503565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c826040516110a3919061172c565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906128a0565b60405180910390fd5b8060030160019054906101000a900460ff16156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906122b1565b60405180910390fd5b8060030160009054906101000a900460ff1615611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90612343565b60405180910390fd5b806002015442111561122b57814261121e919061200f565b8160020181905550611244565b81816002015461123b919061200f565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051611273919061172c565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60035481565b600061132a61139f565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611391929190611b2e565b60405180910390a150919050565b60008060005b600554811015611426576004600082815260200190815260200160002060030160009054906101000a900460ff16611419576004600082815260200190815260200160002060020154421161141957600460008281526020019081526020016000206001015482611416919061200f565b91505b80806001019150506113a5565b506000811161146a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114619061290c565b60405180910390fd5b60008144611478919061295b565b9050600080600090505b600554811015611513576004600082815260200190815260200160002060030160009054906101000a900460ff166115065760046000828152602001908152602001600020600201544211611506576004600082815260200190815260200160002060010154826114f3919061200f565b91508282111561150557809450611513565b5b8080600101915050611482565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261154957611548611524565b5b8235905067ffffffffffffffff81111561156657611565611529565b5b6020830191508360018202830111156115825761158161152e565b5b9250929050565b600080602083850312156115a05761159f61151a565b5b600083013567ffffffffffffffff8111156115be576115bd61151f565b5b6115ca85828601611533565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611601826115d6565b9050919050565b611611816115f6565b811461161c57600080fd5b50565b60008135905061162e81611608565b92915050565b6000819050919050565b61164781611634565b811461165257600080fd5b50565b6000813590506116648161163e565b92915050565b6000806000606084860312156116835761168261151a565b5b60006116918682870161161f565b93505060206116a286828701611655565b92505060406116b386828701611655565b9150509250925092565b6000806000604084860312156116d6576116d561151a565b5b60006116e486828701611655565b935050602084013567ffffffffffffffff8111156117055761170461151f565b5b61171186828701611533565b92509250509250925092565b61172681611634565b82525050565b6000602082019050611741600083018461171d565b92915050565b60006020828403121561175d5761175c61151a565b5b600061176b84828501611655565b91505092915050565b60008083601f84011261178a57611789611524565b5b8235905067ffffffffffffffff8111156117a7576117a6611529565b5b6020830191508360018202830111156117c3576117c261152e565b5b9250929050565b600080600080606085870312156117e4576117e361151a565b5b60006117f287828801611655565b945050602061180387828801611655565b935050604085013567ffffffffffffffff8111156118245761182361151f565b5b61183087828801611774565b925092505092959194509250565b611847816115f6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061188d5761188c61184d565b5b50565b600081905061189e8261187c565b919050565b60006118ae82611890565b9050919050565b6118be816118a3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118fe5780820151818401526020810190506118e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611926826118c4565b61193081856118cf565b93506119408185602086016118e0565b6119498161190a565b840191505092915050565b60008115159050919050565b61196981611954565b82525050565b600060e082019050611984600083018a61183e565b611991602083018961171d565b61199e60408301886118b5565b6119ab606083018761171d565b81810360808301526119bd818661191b565b905081810360a08301526119d1818561191b565b90506119e060c0830184611960565b98975050505050505050565b6119f581611954565b8114611a0057600080fd5b50565b600081359050611a12816119ec565b92915050565b60008060408385031215611a2f57611a2e61151a565b5b6000611a3d85828601611655565b9250506020611a4e85828601611a03565b9150509250929050565b600081905082602060030282011115611a7457611a7361152e565b5b92915050565b60008060008060a08587031215611a9457611a9361151a565b5b6000611aa287828801611655565b945050602085013567ffffffffffffffff811115611ac357611ac261151f565b5b611acf87828801611533565b93509350506040611ae287828801611a58565b91505092959194509250565b60008060408385031215611b0557611b0461151a565b5b6000611b1385828601611655565b9250506020611b2485828601611655565b9150509250929050565b6000604082019050611b43600083018561171d565b611b50602083018461171d565b9392505050565b600060a082019050611b6c600083018861183e565b611b79602083018761171d565b611b86604083018661171d565b611b936060830185611960565b611ba06080830184611960565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611be06010836118cf565b9150611beb82611baa565b602082019050919050565b60006020820190508181036000830152611c0f81611bd3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c5082611634565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c8257611c81611c16565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d0e57607f821691505b602082108103611d2157611d20611cc7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611d897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d4c565b611d938683611d4c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611dd0611dcb611dc684611634565b611dab565b611634565b9050919050565b6000819050919050565b611dea83611db5565b611dfe611df682611dd7565b848454611d59565b825550505050565b600090565b611e13611e06565b611e1e818484611de1565b505050565b5b81811015611e4257611e37600082611e0b565b600181019050611e24565b5050565b601f821115611e8757611e5881611d27565b611e6184611d3c565b81016020851015611e70578190505b611e84611e7c85611d3c565b830182611e23565b50505b505050565b600082821c905092915050565b6000611eaa60001984600802611e8c565b1980831691505092915050565b6000611ec38383611e99565b9150826002028217905092915050565b611edd8383611c8d565b67ffffffffffffffff811115611ef657611ef5611c98565b5b611f008254611cf6565b611f0b828285611e46565b6000601f831160018114611f3a5760008415611f28578287013590505b611f328582611eb7565b865550611f9a565b601f198416611f4886611d27565b60005b82811015611f7057848901358255600182019150602085019450602081019050611f4b565b86831015611f8d5784890135611f89601f891682611e99565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fd96011836118cf565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b600061201a82611634565b915061202583611634565b925082820190508082111561203d5761203c611c16565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006120796018836118cf565b915061208482612043565b602082019050919050565b600060208201905081810360008301526120a88161206c565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061210b603a836118cf565b9150612116826120af565b604082019050919050565b6000602082019050818103600083015261213a816120fe565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b600061219d6034836118cf565b91506121a882612141565b604082019050919050565b600060208201905081810360008301526121cc81612190565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061222f6022836118cf565b915061223a826121d3565b604082019050919050565b6000602082019050818103600083015261225e81612222565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b600061229b6020836118cf565b91506122a682612265565b602082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061232d6024836118cf565b9150612338826122d1565b604082019050919050565b6000602082019050818103600083015261235c81612320565b9050919050565b6000604082019050612378600083018561183e565b612385602083018461171d565b9392505050565b60008151905061239b816119ec565b92915050565b6000602082840312156123b7576123b661151a565b5b60006123c58482850161238c565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006124046020836118cf565b915061240f826123ce565b602082019050919050565b60006020820190508181036000830152612433816123f7565b9050919050565b6000815461244781611cf6565b61245181866118cf565b9450600182166000811461246c5760018114612482576124b5565b60ff1983168652811515602002860193506124b5565b61248b85611d27565b60005b838110156124ad5781548189015260018201915060208101905061248e565b808801955050505b50505092915050565b60006040820190506124d3600083018561183e565b81810360208301526124e5818461243a565b90509392505050565b6000815190506124fd8161163e565b92915050565b6000602082840312156125195761251861151a565b5b6000612527848285016124ee565b91505092915050565b6000604082019050612545600083018561171d565b6125526020830184611960565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61258281611634565b82525050565b60006125948383612579565b60208301905092915050565b6000602082019050919050565b6125b681612559565b6125c08184612564565b92506125cb8261256f565b8060005b838110156125fc5781516125e38782612588565b96506125ee836125a0565b9250506001810190506125cf565b505050505050565b6000819050919050565b600061262961262461261f84612604565b611dab565b611634565b9050919050565b6126398161260e565b82525050565b600082825260208201905092915050565b50565b600061266060008361263f565b915061266b82612650565b600082019050919050565b60006101408201905061268c600083018a61171d565b612699602083018961171d565b6126a660408301886125ad565b6126b360808301876125ad565b6126c060c0830186612630565b6126cd60e0830185611960565b6126db610100830184611960565b8181036101208301526126ed81612653565b905098975050505050505050565b6000606082019050612710600083018661171d565b61271d602083018561171d565b61272a6040830184611960565b949350505050565b82818337600083830152505050565b600061274d83856118cf565b935061275a838584612732565b6127638361190a565b840190509392505050565b82818337505050565b6127836060838361276e565b5050565b600081519050919050565b600061279d82612787565b6127a7818561263f565b93506127b78185602086016118e0565b6127c08161190a565b840191505092915050565b600060e08201905081810360008301526127e681888a612741565b90506127f5602083018761183e565b6128026040830186612777565b61280f60a0830185611960565b81810360c08301526128218184612792565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061288a6033836118cf565b91506128958261282e565b604082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128f6601a836118cf565b9150612901826128c0565b602082019050919050565b60006020820190508181036000830152612925816128e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061296682611634565b915061297183611634565b9250826129815761298061292c565b5b82820690509291505056fea26469706673582212201e34c72c2def9992a23a4a7ba8e9881ca4f623b5c5ae967333715de2fe7b2e6e64736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002b1238038062002b128339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516128cb6200024760003960008181610871015281816109780152610a5701526128cb6000f3fe6080604052600436106100dd5760003560e01c806399ad6c561161007f578063c4a9e11611610059578063c4a9e11614610294578063cf376256146102bf578063d5a44f86146102fd578063d76b67941461033d576100dd565b806399ad6c5614610224578063a035b1fe14610240578063b5b20c001461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806395edaaf2146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112fe565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113df565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611441565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114b2565b61056f565b6040516101869190611441565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611526565b6105ee565b6040516101c99796959493929190611684565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f4919061172d565b61077a565b005b34801561020757600080fd5b50610222600480360381019061021d91906117c3565b610b17565b005b61023e6004803603810190610239919061187a565b610d44565b005b34801561024c57600080fd5b50610255610e8d565b6040516102629190611441565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906118ee565b610e93565b005b3480156102a057600080fd5b506102a9611008565b6040516102b69190611441565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611526565b61100e565b6040516102f492919061192e565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190611526565b611032565b6040516103349493929190611957565b60405180910390f35b34801561034957600080fd5b5061035261108f565b60405161035f9190611441565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e8565b60405180910390fd5b6000600760008154809291906103c290611a37565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611095565b8160030181905550838382600401918261044f929190611cc5565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611de1565b60405180910390fd5b6000600560008154809291906104ae90611a37565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611e01565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611441565b60405180910390a15050505050565b60075481565b60008083838101906105819190611526565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061192e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611562565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611562565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e81565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611562565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b81526004016108f69392919061209c565b6020604051808303816000875af1158015610915573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093991906120f6565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc858560405161096c929190612123565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610a10979695949392919061225a565b60206040518083038185885af1158015610a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5391906120f6565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610add94939291906122df565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610b4257610b41611562565b5b8160020160009054906101000a900460ff166003811115610b6657610b65611562565b5b14610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612370565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612402565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610c7b57610c7a611562565b5b02179055508585836005019182610c93929190611cc5565b5060005b84849050811015610d035782600601858583818110610cb957610cb8612422565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610cf4919061259b565b50508080600101915050610c97565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610d339190611441565b60405180910390a150505050505050565b600060036000815480929190610d5990611a37565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610dd39190611441565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e0396959493929190612642565b60206040518083038185885af1158015610e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4691906120f6565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e7d9190611441565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612717565b60405180910390fd5b8060030160009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906127a9565b60405180910390fd5b8060020154421115610fb3578142610fa69190611e01565b8160020181905550610fcc565b818160020154610fc39190611e01565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610ffb9190611441565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109f611114565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161110692919061192e565b60405180910390a150919050565b60008060005b60055481101561119b576004600082815260200190815260200160002060030160009054906101000a900460ff1661118e576004600082815260200190815260200160002060020154421161118e5760046000828152602001908152602001600020600101548261118b9190611e01565b91505b808060010191505061111a565b50600081116111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690612815565b60405180910390fd5b600081446111ed9190612864565b9050600080600090505b600554811015611288576004600082815260200190815260200160002060030160009054906101000a900460ff1661127b576004600082815260200190815260200160002060020154421161127b576004600082815260200190815260200160002060010154826112689190611e01565b91508282111561127a57809450611288565b5b80806001019150506111f7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112be576112bd611299565b5b8235905067ffffffffffffffff8111156112db576112da61129e565b5b6020830191508360018202830111156112f7576112f66112a3565b5b9250929050565b600080602083850312156113155761131461128f565b5b600083013567ffffffffffffffff81111561133357611332611294565b5b61133f858286016112a8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113768261134b565b9050919050565b6113868161136b565b811461139157600080fd5b50565b6000813590506113a38161137d565b92915050565b6000819050919050565b6113bc816113a9565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000806000606084860312156113f8576113f761128f565b5b600061140686828701611394565b9350506020611417868287016113ca565b9250506040611428868287016113ca565b9150509250925092565b61143b816113a9565b82525050565b60006020820190506114566000830184611432565b92915050565b60008083601f84011261147257611471611299565b5b8235905067ffffffffffffffff81111561148f5761148e61129e565b5b6020830191508360018202830111156114ab576114aa6112a3565b5b9250929050565b600080600080606085870312156114cc576114cb61128f565b5b60006114da878288016113ca565b94505060206114eb878288016113ca565b935050604085013567ffffffffffffffff81111561150c5761150b611294565b5b6115188782880161145c565b925092505092959194509250565b60006020828403121561153c5761153b61128f565b5b600061154a848285016113ca565b91505092915050565b61155c8161136b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106115a2576115a1611562565b5b50565b60008190506115b382611591565b919050565b60006115c3826115a5565b9050919050565b6115d3816115b8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116135780820151818401526020810190506115f8565b60008484015250505050565b6000601f19601f8301169050919050565b600061163b826115d9565b61164581856115e4565b93506116558185602086016115f5565b61165e8161161f565b840191505092915050565b60008115159050919050565b61167e81611669565b82525050565b600060e082019050611699600083018a611553565b6116a66020830189611432565b6116b360408301886115ca565b6116c06060830187611432565b81810360808301526116d28186611630565b905081810360a08301526116e68185611630565b90506116f560c0830184611675565b98975050505050505050565b61170a81611669565b811461171557600080fd5b50565b60008135905061172781611701565b92915050565b600080604083850312156117445761174361128f565b5b6000611752858286016113ca565b925050602061176385828601611718565b9150509250929050565b60008083601f84011261178357611782611299565b5b8235905067ffffffffffffffff8111156117a05761179f61129e565b5b6020830191508360408202830111156117bc576117bb6112a3565b5b9250929050565b6000806000806000606086880312156117df576117de61128f565b5b60006117ed888289016113ca565b955050602086013567ffffffffffffffff81111561180e5761180d611294565b5b61181a888289016112a8565b9450945050604086013567ffffffffffffffff81111561183d5761183c611294565b5b6118498882890161176d565b92509250509295509295909350565b600081905082602060030282011115611874576118736112a3565b5b92915050565b60008060008060a085870312156118945761189361128f565b5b60006118a2878288016113ca565b945050602085013567ffffffffffffffff8111156118c3576118c2611294565b5b6118cf878288016112a8565b935093505060406118e287828801611858565b91505092959194509250565b600080604083850312156119055761190461128f565b5b6000611913858286016113ca565b9250506020611924858286016113ca565b9150509250929050565b60006040820190506119436000830185611432565b6119506020830184611432565b9392505050565b600060808201905061196c6000830187611553565b6119796020830186611432565b6119866040830185611432565b6119936060830184611675565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119d26010836115e4565b91506119dd8261199c565b602082019050919050565b60006020820190508181036000830152611a01816119c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a42826113a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7457611a73611a08565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0057607f821691505b602082108103611b1357611b12611ab9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b3e565b611b858683611b3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bc2611bbd611bb8846113a9565b611b9d565b6113a9565b9050919050565b6000819050919050565b611bdc83611ba7565b611bf0611be882611bc9565b848454611b4b565b825550505050565b600090565b611c05611bf8565b611c10818484611bd3565b505050565b5b81811015611c3457611c29600082611bfd565b600181019050611c16565b5050565b601f821115611c7957611c4a81611b19565b611c5384611b2e565b81016020851015611c62578190505b611c76611c6e85611b2e565b830182611c15565b50505b505050565b600082821c905092915050565b6000611c9c60001984600802611c7e565b1980831691505092915050565b6000611cb58383611c8b565b9150826002028217905092915050565b611ccf8383611a7f565b67ffffffffffffffff811115611ce857611ce7611a8a565b5b611cf28254611ae8565b611cfd828285611c38565b6000601f831160018114611d2c5760008415611d1a578287013590505b611d248582611ca9565b865550611d8c565b601f198416611d3a86611b19565b60005b82811015611d6257848901358255600182019150602085019450602081019050611d3d565b86831015611d7f5784890135611d7b601f891682611c8b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dcb6011836115e4565b9150611dd682611d95565b602082019050919050565b60006020820190508181036000830152611dfa81611dbe565b9050919050565b6000611e0c826113a9565b9150611e17836113a9565b9250828201905080821115611e2f57611e2e611a08565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e6b6020836115e4565b9150611e7682611e35565b602082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b60008154611eae81611ae8565b611eb881866115e4565b94506001821660008114611ed35760018114611ee957611f1c565b60ff198316865281151560200286019350611f1c565b611ef285611b19565b60005b83811015611f1457815481890152600182019150602081019050611ef5565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f80611f7b83611f56565b611f63565b9050919050565b6000819050919050565b611f9a81611f87565b82525050565b6000819050919050565b6000611fbd611fb883611f56565b611fa0565b9050919050565b611fcd816113a9565b82525050565b604082016000808301549050611fe881611f6d565b611ff56000860182611f91565b506001830154905061200681611faa565b6120136020860182611fc4565b5050505050565b60006120268383611fd3565b60408301905092915050565b6000600282019050919050565b600061204a82611f25565b6120548185611f30565b935061205f83611f41565b8060005b8381101561208f5781612076888261201a565b975061208183612032565b925050600181019050612063565b5085935050505092915050565b60006060820190506120b16000830186611553565b81810360208301526120c38185611ea1565b905081810360408301526120d7818461203f565b9050949350505050565b6000815190506120f0816113b3565b92915050565b60006020828403121561210c5761210b61128f565b5b600061211a848285016120e1565b91505092915050565b60006040820190506121386000830185611432565b6121456020830184611675565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006121788383611fc4565b60208301905092915050565b6000602082019050919050565b61219a8161214c565b6121a48184612157565b92506121af82612162565b8060005b838110156121e05781516121c7878261216c565b96506121d283612184565b9250506001810190506121b3565b505050505050565b6000819050919050565b600061220d612208612203846121e8565b611b9d565b6113a9565b9050919050565b61221d816121f2565b82525050565b600082825260208201905092915050565b50565b6000612244600083612223565b915061224f82612234565b600082019050919050565b600061014082019050612270600083018a611432565b61227d6020830189611432565b61228a6040830188612191565b6122976080830187612191565b6122a460c0830186612214565b6122b160e0830185611675565b6122bf610100830184611675565b8181036101208301526122d181612237565b905098975050505050505050565b60006080820190506122f46000830187611432565b6123016020830186611553565b61230e6040830185611432565b61231b6060830184611675565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061235a6018836115e4565b915061236582612324565b602082019050919050565b600060208201905081810360008301526123898161234d565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006123ec603a836115e4565b91506123f782612390565b604082019050919050565b6000602082019050818103600083015261241b816123df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61245a81611f87565b811461246557600080fd5b50565b6000813561247581612451565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6124b78461247e565b9350801983169250808416831791505092915050565b60006124e86124e36124de84611f87565b611b9d565b611f87565b9050919050565b6000819050919050565b612502826124cd565b61251561250e826124ef565b835461248b565b8255505050565b60008135612529816113b3565b80915050919050565b61253b82611ba7565b61254e61254782611bc9565b835461248b565b8255505050565b60008101600083018061256781612468565b905061257381846124f9565b5050506001810160208301806125888161251c565b90506125948184612532565b5050505050565b6125a58282612555565b5050565b82818337600083830152505050565b60006125c483856115e4565b93506125d18385846125a9565b6125da8361161f565b840190509392505050565b82818337505050565b6125fa606083836125e5565b5050565b600081519050919050565b6000612614826125fe565b61261e8185612223565b935061262e8185602086016115f5565b6126378161161f565b840191505092915050565b600060e082019050818103600083015261265d81888a6125b8565b905061266c6020830187611553565b61267960408301866125ee565b61268660a0830185611675565b81810360c08301526126988184612609565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006127016033836115e4565b915061270c826126a5565b604082019050919050565b60006020820190508181036000830152612730816126f4565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006127936024836115e4565b915061279e82612737565b604082019050919050565b600060208201905081810360008301526127c281612786565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006127ff601a836115e4565b915061280a826127c9565b602082019050919050565b6000602082019050818103600083015261282e816127f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061286f826113a9565b915061287a836113a9565b92508261288a57612889612835565b5b82820690509291505056fea264697066735822122088effefef205871ff2ec298610475c80ca315e48a195424bf5b7679adfcb5a9764736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c806399ad6c561161007f578063c4a9e11611610059578063c4a9e11614610294578063cf376256146102bf578063d5a44f86146102fd578063d76b67941461033d576100dd565b806399ad6c5614610224578063a035b1fe14610240578063b5b20c001461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806395edaaf2146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112fe565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113df565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611441565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114b2565b61056f565b6040516101869190611441565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611526565b6105ee565b6040516101c99796959493929190611684565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f4919061172d565b61077a565b005b34801561020757600080fd5b50610222600480360381019061021d91906117c3565b610b17565b005b61023e6004803603810190610239919061187a565b610d44565b005b34801561024c57600080fd5b50610255610e8d565b6040516102629190611441565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906118ee565b610e93565b005b3480156102a057600080fd5b506102a9611008565b6040516102b69190611441565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611526565b61100e565b6040516102f492919061192e565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190611526565b611032565b6040516103349493929190611957565b60405180910390f35b34801561034957600080fd5b5061035261108f565b60405161035f9190611441565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e8565b60405180910390fd5b6000600760008154809291906103c290611a37565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611095565b8160030181905550838382600401918261044f929190611cc5565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611de1565b60405180910390fd5b6000600560008154809291906104ae90611a37565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611e01565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611441565b60405180910390a15050505050565b60075481565b60008083838101906105819190611526565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061192e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611562565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611562565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e81565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611562565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b81526004016108f69392919061209c565b6020604051808303816000875af1158015610915573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093991906120f6565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc858560405161096c929190612123565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610a10979695949392919061225a565b60206040518083038185885af1158015610a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5391906120f6565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610add94939291906122df565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610b4257610b41611562565b5b8160020160009054906101000a900460ff166003811115610b6657610b65611562565b5b14610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612370565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612402565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610c7b57610c7a611562565b5b02179055508585836005019182610c93929190611cc5565b5060005b84849050811015610d035782600601858583818110610cb957610cb8612422565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610cf4919061259b565b50508080600101915050610c97565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610d339190611441565b60405180910390a150505050505050565b600060036000815480929190610d5990611a37565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610dd39190611441565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e0396959493929190612642565b60206040518083038185885af1158015610e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4691906120f6565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e7d9190611441565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612717565b60405180910390fd5b8060030160009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906127a9565b60405180910390fd5b8060020154421115610fb3578142610fa69190611e01565b8160020181905550610fcc565b818160020154610fc39190611e01565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610ffb9190611441565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109f611114565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161110692919061192e565b60405180910390a150919050565b60008060005b60055481101561119b576004600082815260200190815260200160002060030160009054906101000a900460ff1661118e576004600082815260200190815260200160002060020154421161118e5760046000828152602001908152602001600020600101548261118b9190611e01565b91505b808060010191505061111a565b50600081116111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690612815565b60405180910390fd5b600081446111ed9190612864565b9050600080600090505b600554811015611288576004600082815260200190815260200160002060030160009054906101000a900460ff1661127b576004600082815260200190815260200160002060020154421161127b576004600082815260200190815260200160002060010154826112689190611e01565b91508282111561127a57809450611288565b5b80806001019150506111f7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112be576112bd611299565b5b8235905067ffffffffffffffff8111156112db576112da61129e565b5b6020830191508360018202830111156112f7576112f66112a3565b5b9250929050565b600080602083850312156113155761131461128f565b5b600083013567ffffffffffffffff81111561133357611332611294565b5b61133f858286016112a8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113768261134b565b9050919050565b6113868161136b565b811461139157600080fd5b50565b6000813590506113a38161137d565b92915050565b6000819050919050565b6113bc816113a9565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000806000606084860312156113f8576113f761128f565b5b600061140686828701611394565b9350506020611417868287016113ca565b9250506040611428868287016113ca565b9150509250925092565b61143b816113a9565b82525050565b60006020820190506114566000830184611432565b92915050565b60008083601f84011261147257611471611299565b5b8235905067ffffffffffffffff81111561148f5761148e61129e565b5b6020830191508360018202830111156114ab576114aa6112a3565b5b9250929050565b600080600080606085870312156114cc576114cb61128f565b5b60006114da878288016113ca565b94505060206114eb878288016113ca565b935050604085013567ffffffffffffffff81111561150c5761150b611294565b5b6115188782880161145c565b925092505092959194509250565b60006020828403121561153c5761153b61128f565b5b600061154a848285016113ca565b91505092915050565b61155c8161136b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106115a2576115a1611562565b5b50565b60008190506115b382611591565b919050565b60006115c3826115a5565b9050919050565b6115d3816115b8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116135780820151818401526020810190506115f8565b60008484015250505050565b6000601f19601f8301169050919050565b600061163b826115d9565b61164581856115e4565b93506116558185602086016115f5565b61165e8161161f565b840191505092915050565b60008115159050919050565b61167e81611669565b82525050565b600060e082019050611699600083018a611553565b6116a66020830189611432565b6116b360408301886115ca565b6116c06060830187611432565b81810360808301526116d28186611630565b905081810360a08301526116e68185611630565b90506116f560c0830184611675565b98975050505050505050565b61170a81611669565b811461171557600080fd5b50565b60008135905061172781611701565b92915050565b600080604083850312156117445761174361128f565b5b6000611752858286016113ca565b925050602061176385828601611718565b9150509250929050565b60008083601f84011261178357611782611299565b5b8235905067ffffffffffffffff8111156117a05761179f61129e565b5b6020830191508360408202830111156117bc576117bb6112a3565b5b9250929050565b6000806000806000606086880312156117df576117de61128f565b5b60006117ed888289016113ca565b955050602086013567ffffffffffffffff81111561180e5761180d611294565b5b61181a888289016112a8565b9450945050604086013567ffffffffffffffff81111561183d5761183c611294565b5b6118498882890161176d565b92509250509295509295909350565b600081905082602060030282011115611874576118736112a3565b5b92915050565b60008060008060a085870312156118945761189361128f565b5b60006118a2878288016113ca565b945050602085013567ffffffffffffffff8111156118c3576118c2611294565b5b6118cf878288016112a8565b935093505060406118e287828801611858565b91505092959194509250565b600080604083850312156119055761190461128f565b5b6000611913858286016113ca565b9250506020611924858286016113ca565b9150509250929050565b60006040820190506119436000830185611432565b6119506020830184611432565b9392505050565b600060808201905061196c6000830187611553565b6119796020830186611432565b6119866040830185611432565b6119936060830184611675565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119d26010836115e4565b91506119dd8261199c565b602082019050919050565b60006020820190508181036000830152611a01816119c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a42826113a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7457611a73611a08565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0057607f821691505b602082108103611b1357611b12611ab9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b3e565b611b858683611b3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bc2611bbd611bb8846113a9565b611b9d565b6113a9565b9050919050565b6000819050919050565b611bdc83611ba7565b611bf0611be882611bc9565b848454611b4b565b825550505050565b600090565b611c05611bf8565b611c10818484611bd3565b505050565b5b81811015611c3457611c29600082611bfd565b600181019050611c16565b5050565b601f821115611c7957611c4a81611b19565b611c5384611b2e565b81016020851015611c62578190505b611c76611c6e85611b2e565b830182611c15565b50505b505050565b600082821c905092915050565b6000611c9c60001984600802611c7e565b1980831691505092915050565b6000611cb58383611c8b565b9150826002028217905092915050565b611ccf8383611a7f565b67ffffffffffffffff811115611ce857611ce7611a8a565b5b611cf28254611ae8565b611cfd828285611c38565b6000601f831160018114611d2c5760008415611d1a578287013590505b611d248582611ca9565b865550611d8c565b601f198416611d3a86611b19565b60005b82811015611d6257848901358255600182019150602085019450602081019050611d3d565b86831015611d7f5784890135611d7b601f891682611c8b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dcb6011836115e4565b9150611dd682611d95565b602082019050919050565b60006020820190508181036000830152611dfa81611dbe565b9050919050565b6000611e0c826113a9565b9150611e17836113a9565b9250828201905080821115611e2f57611e2e611a08565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e6b6020836115e4565b9150611e7682611e35565b602082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b60008154611eae81611ae8565b611eb881866115e4565b94506001821660008114611ed35760018114611ee957611f1c565b60ff198316865281151560200286019350611f1c565b611ef285611b19565b60005b83811015611f1457815481890152600182019150602081019050611ef5565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f80611f7b83611f56565b611f63565b9050919050565b6000819050919050565b611f9a81611f87565b82525050565b6000819050919050565b6000611fbd611fb883611f56565b611fa0565b9050919050565b611fcd816113a9565b82525050565b604082016000808301549050611fe881611f6d565b611ff56000860182611f91565b506001830154905061200681611faa565b6120136020860182611fc4565b5050505050565b60006120268383611fd3565b60408301905092915050565b6000600282019050919050565b600061204a82611f25565b6120548185611f30565b935061205f83611f41565b8060005b8381101561208f5781612076888261201a565b975061208183612032565b925050600181019050612063565b5085935050505092915050565b60006060820190506120b16000830186611553565b81810360208301526120c38185611ea1565b905081810360408301526120d7818461203f565b9050949350505050565b6000815190506120f0816113b3565b92915050565b60006020828403121561210c5761210b61128f565b5b600061211a848285016120e1565b91505092915050565b60006040820190506121386000830185611432565b6121456020830184611675565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006121788383611fc4565b60208301905092915050565b6000602082019050919050565b61219a8161214c565b6121a48184612157565b92506121af82612162565b8060005b838110156121e05781516121c7878261216c565b96506121d283612184565b9250506001810190506121b3565b505050505050565b6000819050919050565b600061220d612208612203846121e8565b611b9d565b6113a9565b9050919050565b61221d816121f2565b82525050565b600082825260208201905092915050565b50565b6000612244600083612223565b915061224f82612234565b600082019050919050565b600061014082019050612270600083018a611432565b61227d6020830189611432565b61228a6040830188612191565b6122976080830187612191565b6122a460c0830186612214565b6122b160e0830185611675565b6122bf610100830184611675565b8181036101208301526122d181612237565b905098975050505050505050565b60006080820190506122f46000830187611432565b6123016020830186611553565b61230e6040830185611432565b61231b6060830184611675565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061235a6018836115e4565b915061236582612324565b602082019050919050565b600060208201905081810360008301526123898161234d565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006123ec603a836115e4565b91506123f782612390565b604082019050919050565b6000602082019050818103600083015261241b816123df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61245a81611f87565b811461246557600080fd5b50565b6000813561247581612451565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6124b78461247e565b9350801983169250808416831791505092915050565b60006124e86124e36124de84611f87565b611b9d565b611f87565b9050919050565b6000819050919050565b612502826124cd565b61251561250e826124ef565b835461248b565b8255505050565b60008135612529816113b3565b80915050919050565b61253b82611ba7565b61254e61254782611bc9565b835461248b565b8255505050565b60008101600083018061256781612468565b905061257381846124f9565b5050506001810160208301806125888161251c565b90506125948184612532565b5050505050565b6125a58282612555565b5050565b82818337600083830152505050565b60006125c483856115e4565b93506125d18385846125a9565b6125da8361161f565b840190509392505050565b82818337505050565b6125fa606083836125e5565b5050565b600081519050919050565b6000612614826125fe565b61261e8185612223565b935061262e8185602086016115f5565b6126378161161f565b840191505092915050565b600060e082019050818103600083015261265d81888a6125b8565b905061266c6020830187611553565b61267960408301866125ee565b61268660a0830185611675565b81810360c08301526126988184612609565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006127016033836115e4565b915061270c826126a5565b604082019050919050565b60006020820190508181036000830152612730816126f4565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006127936024836115e4565b915061279e82612737565b604082019050919050565b600060208201905081810360008301526127c281612786565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006127ff601a836115e4565b915061280a826127c9565b602082019050919050565b6000602082019050818103600083015261282e816127f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061286f826113a9565b915061287a836113a9565b92508261288a57612889612835565b5b82820690509291505056fea264697066735822122088effefef205871ff2ec298610475c80ca315e48a195424bf5b7679adfcb5a9764736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/contract-addresses.json b/client/src/contract-addresses.json index 90ffa16..3473d34 100644 --- a/client/src/contract-addresses.json +++ b/client/src/contract-addresses.json @@ -6,9 +6,9 @@ "Proposals": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139" }, "sepolia": { - "DAO": "0x58c41E768aCA55B39b5dC0618c0D0bE3f5519943", - "Work1": "0x6cEca2BB849c2a00786A05ed4fC64D08905724Cc", - "Onboarding": "0x4b3906a6356F387bF5dd26FD34B072d20Cd40a7b", - "Proposals": "0x3E1A6EE8D24Ba7D1392104B8652Bb0D2BDF127EE" + "DAO": "0x4079D97F7dfd15AB758F0dedEdB15c86Ea3AD8eB", + "Work1": "0x027B534DE68704754886951a1C5f0F6640aA38B0", + "Onboarding": "0x0CB593989FDdC0439840CCe484eD550f333e963a", + "Proposals": "0xA31C8ef8506Edc02772522671562F1520FD963B5" } } \ No newline at end of file diff --git a/ethereum/.env.example b/ethereum/.env.example index 7fdc978..a91e15e 100644 --- a/ethereum/.env.example +++ b/ethereum/.env.example @@ -1,6 +1,7 @@ API_URL="https://demo.dgov.io/api" CA_PATH= SEPOLIA_PRIVATE_KEY= +MAINNET_PRIVATE_KEY= ETHERSCAN_API_KEY= WORK1_PRICE="0.001" ONBOARDING_PRICE="0.001" \ No newline at end of file diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index 90ffa16..3473d34 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -6,9 +6,9 @@ "Proposals": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139" }, "sepolia": { - "DAO": "0x58c41E768aCA55B39b5dC0618c0D0bE3f5519943", - "Work1": "0x6cEca2BB849c2a00786A05ed4fC64D08905724Cc", - "Onboarding": "0x4b3906a6356F387bF5dd26FD34B072d20Cd40a7b", - "Proposals": "0x3E1A6EE8D24Ba7D1392104B8652Bb0D2BDF127EE" + "DAO": "0x4079D97F7dfd15AB758F0dedEdB15c86Ea3AD8eB", + "Work1": "0x027B534DE68704754886951a1C5f0F6640aA38B0", + "Onboarding": "0x0CB593989FDdC0439840CCe484eD550f333e963a", + "Proposals": "0xA31C8ef8506Edc02772522671562F1520FD963B5" } } \ No newline at end of file diff --git a/ethereum/contracts/core/Forum.sol b/ethereum/contracts/core/Forum.sol index c42dbf1..df9a47a 100644 --- a/ethereum/contracts/core/Forum.sol +++ b/ethereum/contracts/core/Forum.sol @@ -148,11 +148,21 @@ contract Forum is Reputation { } else { // Prevent reputation from being reduced below zero if (int(post.reputation) + amount >= 0) { - _update(post.author, address(this), uint(-amount)); + if (balanceOf(post.author) >= uint(-amount)) { + _update(post.author, address(this), uint(-amount)); + } else { + // Author has already lost some REP gained from this post. + // That means other DAO members have earned it for policing. + // We need to refund the difference here to ensure accurate bookkeeping + refundToInbound = amount + int(balanceOf(post.author)); + _update(post.author, address(this), balanceOf(post.author)); + } post.reputation -= uint(-amount); } else { refundToInbound = int(post.reputation) + amount; - if (balanceOf(post.author) < post.reputation) { + if (balanceOf(post.author) >= post.reputation) { + _update(post.author, address(this), post.reputation); + } else { // If author has already lost reputation that was gained from this post, // that means other DAO members gained it through policing. // We have to increase the magnitude of the amount we're "refunding", which is expressed as a negative number. @@ -163,8 +173,6 @@ contract Forum is Reputation { post.reputation - balanceOf(post.author) ); _update(post.author, address(this), balanceOf(post.author)); - } else { - _update(post.author, address(this), post.reputation); } post.reputation = 0; } diff --git a/ethereum/contracts/core/ValidationPools.sol b/ethereum/contracts/core/ValidationPools.sol index 0ac4c7d..26337f9 100644 --- a/ethereum/contracts/core/ValidationPools.sol +++ b/ethereum/contracts/core/ValidationPools.sol @@ -227,36 +227,44 @@ contract ValidationPools is Reputation, Forum { // Here we assume a stakeForAuthor ratio of 0.5 // TODO: Make stakeForAuthor an adjustable parameter totalRewards += pool.minted / 2; - uint reward = ((((totalRewards * pool.minted) / 2) / - amountFromWinners) * pool.params.bindingPercent) / 100; - totalAllocated += reward; + // Include the losign portion of the VP initial stake + // Issue rewards to the winners + for (uint i = 0; i < pool.stakeCount; i++) { + s = pool.stakes[i]; + if ( + pool.params.redistributeLosingStakes && + votePasses == s.inFavor + ) { + // Winning stake + uint reward = (((totalRewards * s.amount) / + amountFromWinners) * pool.params.bindingPercent) / 100; + totalAllocated += reward; + _update(address(this), s.sender, reward); + } + } + // Due to rounding, there may be some excess REP. Award it to the author. + uint remainder = totalRewards - totalAllocated; // Transfer REP to the forum instead of to the author directly - _onValidatePost(pool.postIndex, pool.minted / 2 + reward); + _onValidatePost(pool.postIndex, pool.minted / 2 + remainder); } else { // If vote does not pass, divide the losing stake among the winners totalRewards += pool.minted; - } - // Include the losign portion of the VP initial stake - // Issue rewards to the winners - for (uint i = 0; i < pool.stakeCount; i++) { - s = pool.stakes[i]; - if ( - pool.params.redistributeLosingStakes && votePasses == s.inFavor - ) { - // Winning stake - uint reward = (((totalRewards * s.amount) / amountFromWinners) * - pool.params.bindingPercent) / 100; - totalAllocated += reward; - _update(address(this), s.sender, reward); + for (uint i = 0; i < pool.stakeCount; i++) { + s = pool.stakes[i]; + if ( + pool.params.redistributeLosingStakes && + votePasses == s.inFavor + ) { + // Winning stake + uint reward = (((totalRewards * s.amount) / + (amountFromWinners - pool.minted / 2)) * + pool.params.bindingPercent) / 100; + totalAllocated += reward; + _update(address(this), s.sender, reward); + } } } - // Due to rounding, some reward may be left over. Let's give it to the author. - uint remainder = totalRewards - totalAllocated; - if (remainder > 0) { - _update(address(this), post.author, remainder); - } - // Distribute fee proportionately among all reputation holders for (uint i = 0; i < memberCount; i++) { address member = members[i]; diff --git a/ethereum/hardhat.config.js b/ethereum/hardhat.config.js index 15b2f03..8b8ab69 100644 --- a/ethereum/hardhat.config.js +++ b/ethereum/hardhat.config.js @@ -16,6 +16,10 @@ module.exports = { url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, accounts: [process.env.SEPOLIA_PRIVATE_KEY], }, + mainnet: { + url: `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`, + accounts: [process.env.MAINNET_PRIVATE_KEY], + }, }, etherscan: { apiKey: { diff --git a/ethereum/package.json b/ethereum/package.json index 03d0e27..d78f8a0 100644 --- a/ethereum/package.json +++ b/ethereum/package.json @@ -9,6 +9,7 @@ "automatic-staking-sepolia": "API_URL='https://demo.dgov.io/api' CA_PATH='' hardhat run --network sepolia scripts/automatic-staking.js", "deploy-local": "hardhat run --network localhost scripts/deploy.js", "deploy-sepolia": "hardhat run --network sepolia scripts/deploy.js", + "deploy-dao-mainnet": "hardhat run --network mainnet scripts/deploy-dao.js", "deploy-work-contracts-local": "hardhat run --network localhost scripts/deploy-work-contracts.js", "deploy-work-contracts-sepolia": "hardhat run --network sepolia scripts/deploy-work-contracts.js", "verify-sepolia": "hardhat run --network sepolia scripts/verify.js" diff --git a/ethereum/scripts/deploy-dao.js b/ethereum/scripts/deploy-dao.js new file mode 100644 index 0000000..7cbd892 --- /dev/null +++ b/ethereum/scripts/deploy-dao.js @@ -0,0 +1,10 @@ +const deployContract = require('./util/deploy-contract'); + +async function main() { + await deployContract('DAO', [], true); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/ethereum/scripts/deploy.js b/ethereum/scripts/deploy.js index ce724cd..a2bacf8 100644 --- a/ethereum/scripts/deploy.js +++ b/ethereum/scripts/deploy.js @@ -3,7 +3,7 @@ const deployContract = require('./util/deploy-contract'); const deployDAOContract = require('./util/deploy-dao-contract'); async function main() { - await deployContract('DAO'); + await deployContract('DAO', [], true); await deployDAOContract('Proposals'); await deployWorkContract('Work1'); await deployWorkContract('Onboarding'); diff --git a/ethereum/scripts/util/deploy-contract.js b/ethereum/scripts/util/deploy-contract.js index f800083..aef5b9f 100644 --- a/ethereum/scripts/util/deploy-contract.js +++ b/ethereum/scripts/util/deploy-contract.js @@ -8,13 +8,13 @@ require('dotenv').config(); const network = process.env.HARDHAT_NETWORK; -const deployContract = async (name, args = []) => { +const deployContract = async (name, args = [], isCore = false) => { const contract = await ethers.deployContract(name, args); await contract.waitForDeployment(); console.log(`${name} deployed to ${contract.target}`); contractAddresses[network][name] = contract.target; - const from = `./artifacts/contracts/${name}.sol/${name}.json`; + const from = `./artifacts/contracts/${isCore ? 'core/' : ''}${name}.sol/${name}.json`; const to = `../client/src/assets/${name}.json`; fs.copyFileSync(from, to); console.log(`Copied ${fs.realpathSync(from)} to ${fs.realpathSync(to)}`); diff --git a/ethereum/test/Forum.js b/ethereum/test/Forum.js index 2d53754..8c42a23 100644 --- a/ethereum/test/Forum.js +++ b/ethereum/test/Forum.js @@ -156,8 +156,8 @@ describe('Forum', () => { await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(2); expect(await dao.balanceOf(account1)).to.equal(133); - expect(await dao.balanceOf(account2)).to.equal(34); - expect(await dao.balanceOf(account3)).to.equal(133); + expect(await dao.balanceOf(account2)).to.equal(33); + expect(await dao.balanceOf(account3)).to.equal(134); }); it('should limit effects of negative references on prior positive references', async () => { @@ -234,48 +234,82 @@ describe('Forum', () => { expect(await dao.totalSupply()).to.equal(50); }); - it('handles the case where an author has already lost reputation gained from a later-downvoted post', async () => { - await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); - await dao.evaluateOutcome(0); - expect(await dao.balanceOf(account1)).to.equal(100); - expect(await dao.totalSupply()).to.equal(100); - expect((await dao.posts(0)).reputation).to.equal(100); + describe('negative citation of a post, the author having already staked and lost reputation', async () => { + beforeEach(async () => { + await dao.addPost(account1, 'content-id', []); + await initiateValidationPool({ postIndex: 0 }); + await dao.evaluateOutcome(0); + expect(await dao.balanceOf(account1)).to.equal(100); + expect(await dao.totalSupply()).to.equal(100); + expect((await dao.posts(0)).reputation).to.equal(100); - await dao.addPost(account2, 'second-content-id', []); - await initiateValidationPool({ postIndex: 1 }); - await time.increase(POOL_DURATION + 1); - await dao.evaluateOutcome(1); - expect(await dao.balanceOf(account1)).to.equal(100); - expect(await dao.balanceOf(account2)).to.equal(100); - expect(await dao.totalSupply()).to.equal(200); - expect((await dao.posts(0)).reputation).to.equal(100); - expect((await dao.posts(1)).reputation).to.equal(100); + await dao.addPost(account2, 'second-content-id', []); + await initiateValidationPool({ postIndex: 1 }); + await time.increase(POOL_DURATION + 1); + await dao.evaluateOutcome(1); + expect(await dao.balanceOf(account1)).to.equal(100); + expect(await dao.balanceOf(account2)).to.equal(100); + expect(await dao.totalSupply()).to.equal(200); + expect((await dao.posts(0)).reputation).to.equal(100); + expect((await dao.posts(1)).reputation).to.equal(100); - // account1 stakes and loses - await initiateValidationPool({ postIndex: 1 }); - await dao.stakeOnValidationPool(2, 50, true); - await dao.connect(account2).stakeOnValidationPool(2, 60, false); - await time.increase(POOL_DURATION + 1); - await dao.evaluateOutcome(2); - expect(await dao.balanceOf(account1)).to.equal(50); - expect(await dao.balanceOf(account2)).to.equal(250); - expect(await dao.totalSupply()).to.equal(300); - expect((await dao.posts(0)).reputation).to.equal(100); - expect((await dao.posts(1)).reputation).to.equal(100); + // account1 stakes and loses + await initiateValidationPool({ postIndex: 1 }); + await dao.stakeOnValidationPool(2, 50, true); + await dao.connect(account2).stakeOnValidationPool(2, 60, false); + await time.increase(POOL_DURATION + 1); + await dao.evaluateOutcome(2); + expect(await dao.balanceOf(account1)).to.equal(50); + expect(await dao.balanceOf(account2)).to.equal(250); + expect(await dao.totalSupply()).to.equal(300); + expect((await dao.posts(0)).reputation).to.equal(100); + expect((await dao.posts(1)).reputation).to.equal(100); + }); - // account1's post is later negatively referenced - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 2, fee: 200 }); - await time.increase(POOL_DURATION + 1); - await dao.evaluateOutcome(3); - expect(await dao.balanceOf(account1)).to.equal(0); - expect(await dao.balanceOf(account2)).to.equal(250); - expect(await dao.balanceOf(account3)).to.equal(250); - expect(await dao.totalSupply()).to.equal(500); - expect((await dao.posts(0)).reputation).to.equal(0); - expect((await dao.posts(1)).reputation).to.equal(100); - expect((await dao.posts(2)).reputation).to.equal(250); + it('author and post rep can be completely destroyed', async () => { + // account1's post is later strongly negatively referenced + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); + await initiateValidationPool({ postIndex: 2, fee: 200 }); + await time.increase(POOL_DURATION + 1); + await dao.evaluateOutcome(3); + expect(await dao.balanceOf(account1)).to.equal(0); + expect(await dao.balanceOf(account2)).to.equal(250); + expect(await dao.balanceOf(account3)).to.equal(250); + expect(await dao.totalSupply()).to.equal(500); + expect((await dao.posts(0)).reputation).to.equal(0); + expect((await dao.posts(1)).reputation).to.equal(100); + expect((await dao.posts(2)).reputation).to.equal(250); + }); + + it('author rep can be destroyed while some post rep remains', async () => { + // account1's post is later strongly negatively referenced + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); + await initiateValidationPool({ postIndex: 2, fee: 70 }); + await time.increase(POOL_DURATION + 1); + await dao.evaluateOutcome(3); + expect(await dao.totalSupply()).to.equal(370); + expect(await dao.balanceOf(account1)).to.equal(0); + expect(await dao.balanceOf(account2)).to.equal(250); + expect(await dao.balanceOf(account3)).to.equal(120); + expect((await dao.posts(0)).reputation).to.equal(30); + expect((await dao.posts(1)).reputation).to.equal(100); + expect((await dao.posts(2)).reputation).to.equal(120); + }); + + it('author rep can be destroyed while some post rep remains (odd amount)', async () => { + // account1's post is later strongly negatively referenced + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); + await initiateValidationPool({ postIndex: 2, fee: 75 }); + await time.increase(POOL_DURATION + 1); + await dao.evaluateOutcome(3); + expect(await dao.totalSupply()).to.equal(375); + expect(await dao.balanceOf(account1)).to.equal(0); + expect(await dao.balanceOf(account2)).to.equal(250); + expect(await dao.balanceOf(account3)).to.equal(124); + expect((await dao.posts(0)).reputation).to.equal(26); + expect((await dao.posts(1)).reputation).to.equal(100); + expect((await dao.posts(2)).reputation).to.equal(124); + }); }); }); });