60806040523480156200001157600080fd5b50604051620028ba380380620028ba83398101604081905262000034916200042f565b828282733cc6cdda760b79bafa08df41ecfa224f810dceb66001838360006200005e838262000548565b5060016200006d828262000548565b5050506200008a620000846200020f60201b60201c565b62000213565b336000908152600960205260409020805460ff191660011790556daaeb6d7670e522a718067333cd4e3b15620001e95780156200013757604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200011857600080fd5b505af11580156200012d573d6000803e3d6000fd5b50505050620001e9565b6001600160a01b03821615620001885760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000fd565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001cf57600080fd5b505af1158015620001e4573d6000803e3d6000fd5b505050505b505060085462000203906001600160a01b03168462000265565b50505050505062000614565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382161115620002d95760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620003315760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620002d0565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200039257600080fd5b81516001600160401b0380821115620003af57620003af6200036a565b604051601f8301601f19908116603f01168101908282118183101715620003da57620003da6200036a565b81604052838152602092508683858801011115620003f757600080fd5b600091505b838210156200041b5785820183015181830184015290820190620003fc565b600093810190920192909252949350505050565b6000806000606084860312156200044557600080fd5b83516001600160601b03811681146200045d57600080fd5b60208501519093506001600160401b03808211156200047b57600080fd5b620004898783880162000380565b93506040860151915080821115620004a057600080fd5b50620004af8682870162000380565b9150509250925092565b600181811c90821680620004ce57607f821691505b602082108103620004ef57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054357600081815260208120601f850160051c810160208610156200051e5750805b601f850160051c820191505b818110156200053f578281556001016200052a565b5050505b505050565b81516001600160401b038111156200056457620005646200036a565b6200057c81620005758454620004b9565b84620004f5565b602080601f831160018114620005b457600084156200059b5750858301515b600019600386901b1c1916600185901b1785556200053f565b600085815260208120601f198616915b82811015620005e557888601518255948401946001909101908401620005c4565b5085821015620006045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61229680620006246000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637995c1e41161013b578063bd3c996b116100b8578063df10580a1161007c578063df10580a14610540578063e0b6bb6714610554578063e985e9c51461055c578063f2fde38b1461056f578063f44637ba1461058257600080fd5b8063bd3c996b146104df578063c87b56dd146104f3578063cf87f42b14610506578063d7e45cd714610519578063de836ebd1461052d57600080fd5b8063989bdbb6116100ff578063989bdbb61461048b578063a0c76f6214610493578063a22cb465146104a6578063b80f55c9146104b9578063b88d4fde146104cc57600080fd5b80637995c1e4146104295780638b78f0ef1461043c5780638da5cb5b1461045f57806395d89b4114610470578063983b2d561461047857600080fd5b80632a55205a116101c95780635766fa9a1161018d5780635766fa9a146103d55780635944c753146103e85780636352211e146103fb57806370a082311461040e578063715018a61461042157600080fd5b80632a55205a146103455780633092afd51461037757806341f434341461038a57806342842e0e1461039f57806355bc8725146103b257600080fd5b8063095ea7b311610210578063095ea7b3146102dd57806318160ddd146102f05780631a2f459f146103075780631aff0dba1461032a57806323b872dd1461033257600080fd5b806301ffc9a71461024d578063028468581461027557806304634d8d1461028a57806306fdde031461029d578063081812fc146102b2575b600080fd5b61026061025b366004611af5565b610595565b60405190151581526020015b60405180910390f35b610288610283366004611b35565b6105a6565b005b610288610298366004611b67565b6105cf565b6102a56105e5565b60405161026c9190611bea565b6102c56102c0366004611bfd565b610677565b6040516001600160a01b03909116815260200161026c565b6102886102eb366004611c16565b61069e565b6102f9600c5481565b60405190815260200161026c565b610260610315366004611b35565b600a6020526000908152604090205460ff1681565b6102886106b7565b610288610340366004611c40565b6106d4565b610358610353366004611c7c565b6106ff565b604080516001600160a01b03909316835260208301919091520161026c565b610288610385366004611b35565b6107ab565b6102c56daaeb6d7670e522a718067333cd4e81565b6102886103ad366004611c40565b6107d4565b6102606103c0366004611b35565b600d6020526000908152604090205460ff1681565b6102886103e3366004611b35565b6107f9565b6102886103f6366004611c9e565b610825565b6102c5610409366004611bfd565b610838565b6102f961041c366004611b35565b61089d565b610288610923565b610288610437366004611b35565b610937565b61026061044a366004611b35565b60096020526000908152604090205460ff1681565b6008546001600160a01b03166102c5565b6102a56109bb565b610288610486366004611b35565b6109ca565b6102886109f6565b600b546102c5906001600160a01b031681565b6102886104b4366004611ce8565b610a13565b6102886104c7366004611de6565b610a27565b6102886104da366004611e43565b610b4e565b60085461026090600160a81b900460ff1681565b6102a5610501366004611bfd565b610b7b565b610288610514366004611b35565b610bf7565b60085461026090600160b01b900460ff1681565b61028861053b366004611eee565b610c20565b60085461026090600160a01b900460ff1681565b610288610d49565b61026061056a366004611f3c565b610d66565b61028861057d366004611b35565b610d94565b610288610590366004611b35565b610e0d565b60006105a082610e39565b92915050565b6105ae610e5e565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6105d7610e5e565b6105e18282610eb8565b5050565b6060600080546105f490611f66565b80601f016020809104026020016040519081016040528092919081815260200182805461062090611f66565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b5050505050905090565b600061068282610f72565b506000908152600460205260409020546001600160a01b031690565b816106a881610fd1565b6106b2838361108a565b505050565b6106bf610e5e565b6008805460ff60a81b1916600160a81b179055565b826001600160a01b03811633146106ee576106ee33610fd1565b6106f984848461119a565b50505050565b60008281526007602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916107745750604080518082019091526006546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610793906001600160601b031687611fb6565b61079d9190611fcd565b915196919550909350505050565b6107b3610e5e565b6001600160a01b03166000908152600960205260409020805460ff19169055565b826001600160a01b03811633146107ee576107ee33610fd1565b6106f98484846111cb565b610801610e5e565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b61082d610e5e565b6106b28383836111e6565b6000818152600260205260408120546001600160a01b0316806105a05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064015b60405180910390fd5b60006001600160a01b0382166109075760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610894565b506001600160a01b031660009081526003602052604090205490565b61092b610e5e565b61093560006112b1565b565b61093f610e5e565b600854600160b01b900460ff16156109995760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b61626c653a206d65746164617461206973206c6f636b6564000000006044820152606401610894565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600180546105f490611f66565b6109d2610e5e565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6109fe610e5e565b6008805460ff60b01b1916600160b01b179055565b81610a1d81610fd1565b6106b28383611303565b336000908152600a602052604090205460ff16610a985760405162461bcd60e51b815260206004820152602960248201527f50726f7465637465644d696e744275726e3a2063616c6c6572206973206e6f74604482015268103090313ab93732b960b91b6064820152608401610894565b600854600160a81b900460ff1615610af25760405162461bcd60e51b815260206004820152601860248201527f4c6f636b61626c653a206275726e206973206c6f636b656400000000000000006044820152606401610894565b60005b8151811015610b3257610b20828281518110610b1357610b13611fef565b602002602001015161130e565b80610b2a81612005565b915050610af5565b508051600c6000828254610b46919061201e565b909155505050565b836001600160a01b0381163314610b6857610b6833610fd1565b610b74858585856113b1565b5050505050565b6060610b8682610f72565b600b54604051633bb3a24d60e01b8152600481018490526001600160a01b0390911690633bb3a24d90602401600060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a09190810190612031565b610bff610e5e565b6001600160a01b03166000908152600d60205260409020805460ff19169055565b3360009081526009602052604090205460ff16610c915760405162461bcd60e51b815260206004820152602960248201527f50726f7465637465644d696e744275726e3a2063616c6c6572206973206e6f7460448201526810309036b4b73a32b960b91b6064820152608401610894565b600854600160a01b900460ff1615610ceb5760405162461bcd60e51b815260206004820152601860248201527f4c6f636b61626c653a206d696e74206973206c6f636b656400000000000000006044820152606401610894565b60005b8151811015610d2c57610d1a83838381518110610d0d57610d0d611fef565b60200260200101516113e3565b80610d2481612005565b915050610cee565b508051600c6000828254610d4091906120a8565b90915550505050565b610d51610e5e565b6008805460ff60a01b1916600160a01b179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610d9c610e5e565b6001600160a01b038116610e015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610894565b610e0a816112b1565b50565b610e15610e5e565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60006001600160e01b0319821663152a902d60e11b14806105a057506105a0826113fd565b6008546001600160a01b031633146109355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610894565b6127106001600160601b0382161115610ee35760405162461bcd60e51b8152600401610894906120bb565b6001600160a01b038216610f395760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610894565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b6000818152600260205260409020546001600160a01b0316610e0a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610894565b6daaeb6d7670e522a718067333cd4e3b15610e0a57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110629190612105565b610e0a57604051633b79c77360e21b81526001600160a01b0382166004820152602401610894565b600061109582610838565b9050806001600160a01b0316836001600160a01b0316036111025760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610894565b336001600160a01b038216148061111e575061111e8133610d66565b6111905760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610894565b6106b2838361144d565b6111a433826114bb565b6111c05760405162461bcd60e51b815260040161089490612122565b6106b283838361151a565b6106b283838360405180602001604052806000815250610b4e565b6127106001600160601b03821611156112115760405162461bcd60e51b8152600401610894906120bb565b6001600160a01b0382166112675760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610894565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600790529190942093519051909116600160a01b029116179055565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6105e133838361168b565b600061131982610838565b9050611329816000846001611759565b61133282610838565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6113bb33836114bb565b6113d75760405162461bcd60e51b815260040161089490612122565b6106f9848484846117df565b6105e1828260405180602001604052806000815250611812565b60006001600160e01b031982166380ac58cd60e01b148061142e57506001600160e01b03198216635b5e139f60e01b145b806105a057506301ffc9a760e01b6001600160e01b03198316146105a0565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061148282610838565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806114c783610838565b9050806001600160a01b0316846001600160a01b031614806114ee57506114ee8185610d66565b806115125750836001600160a01b031661150784610677565b6001600160a01b0316145b949350505050565b826001600160a01b031661152d82610838565b6001600160a01b0316146115535760405162461bcd60e51b81526004016108949061216f565b6001600160a01b0382166115b55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610894565b6115c28383836001611759565b826001600160a01b03166115d582610838565b6001600160a01b0316146115fb5760405162461bcd60e51b81526004016108949061216f565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316036116ec5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610894565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b336000908152600d602052604090205460ff16156106f95760405162461bcd60e51b815260206004820152603960248201527f426173653732313a205468652063616c6c6572206973206e6f7420616c6c6f7760448201527f656420746f20646f2074686973207472616e73616374696f6e000000000000006064820152608401610894565b6117ea84848461151a565b6117f684848484611845565b6106f95760405162461bcd60e51b8152600401610894906121b4565b61181c8383611946565b6118296000848484611845565b6106b25760405162461bcd60e51b8152600401610894906121b4565b60006001600160a01b0384163b1561193b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611889903390899088908890600401612206565b6020604051808303816000875af19250505080156118c4575060408051601f3d908101601f191682019092526118c191810190612243565b60015b611921573d8080156118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f7565b606091505b5080516000036119195760405162461bcd60e51b8152600401610894906121b4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611512565b506001949350505050565b6001600160a01b03821661199c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610894565b6000818152600260205260409020546001600160a01b031615611a015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610894565b611a0f600083836001611759565b6000818152600260205260409020546001600160a01b031615611a745760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610894565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610e0a57600080fd5b600060208284031215611b0757600080fd5b8135611b1281611adf565b9392505050565b80356001600160a01b0381168114611b3057600080fd5b919050565b600060208284031215611b4757600080fd5b611b1282611b19565b80356001600160601b0381168114611b3057600080fd5b60008060408385031215611b7a57600080fd5b611b8383611b19565b9150611b9160208401611b50565b90509250929050565b60005b83811015611bb5578181015183820152602001611b9d565b50506000910152565b60008151808452611bd6816020860160208601611b9a565b601f01601f19169290920160200192915050565b602081526000611b126020830184611bbe565b600060208284031215611c0f57600080fd5b5035919050565b60008060408385031215611c2957600080fd5b611c3283611b19565b946020939093013593505050565b600080600060608486031215611c5557600080fd5b611c5e84611b19565b9250611c6c60208501611b19565b9150604084013590509250925092565b60008060408385031215611c8f57600080fd5b50508035926020909101359150565b600080600060608486031215611cb357600080fd5b83359250611cc360208501611b19565b9150611cd160408501611b50565b90509250925092565b8015158114610e0a57600080fd5b60008060408385031215611cfb57600080fd5b611d0483611b19565b91506020830135611d1481611cda565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d5e57611d5e611d1f565b604052919050565b600082601f830112611d7757600080fd5b8135602067ffffffffffffffff821115611d9357611d93611d1f565b8160051b611da2828201611d35565b9283528481018201928281019087851115611dbc57600080fd5b83870192505b84831015611ddb57823582529183019190830190611dc2565b979650505050505050565b600060208284031215611df857600080fd5b813567ffffffffffffffff811115611e0f57600080fd5b61151284828501611d66565b600067ffffffffffffffff821115611e3557611e35611d1f565b50601f01601f191660200190565b60008060008060808587031215611e5957600080fd5b611e6285611b19565b9350611e7060208601611b19565b925060408501359150606085013567ffffffffffffffff811115611e9357600080fd5b8501601f81018713611ea457600080fd5b8035611eb7611eb282611e1b565b611d35565b818152886020838501011115611ecc57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611f0157600080fd5b611f0a83611b19565b9150602083013567ffffffffffffffff811115611f2657600080fd5b611f3285828601611d66565b9150509250929050565b60008060408385031215611f4f57600080fd5b611f5883611b19565b9150611b9160208401611b19565b600181811c90821680611f7a57607f821691505b602082108103611f9a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176105a0576105a0611fa0565b600082611fea57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161201757612017611fa0565b5060010190565b818103818111156105a0576105a0611fa0565b60006020828403121561204357600080fd5b815167ffffffffffffffff81111561205a57600080fd5b8201601f8101841361206b57600080fd5b8051612079611eb282611e1b565b81815285602083850101111561208e57600080fd5b61209f826020830160208601611b9a565b95945050505050565b808201808211156105a0576105a0611fa0565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60006020828403121561211757600080fd5b8151611b1281611cda565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061223990830184611bbe565b9695505050505050565b60006020828403121561225557600080fd5b8151611b1281611adf56fea2646970667358221220d97392e46449e20e76de663093ffe8d1cdb2867dfc31f125bebdb9965971d11964736f6c6343000812003300000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000166d6d455243483a2045676720436f6c6c656374696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000026d6d000000000000000000000000000000000000000000000000000000000000