60806040526127106008556009805463ffffffff1916600117905566038d7ea4c68000600a55600b805461ffff19166101001790553480156200004157600080fd5b50604051620024a1380380620024a183398101604081905262000064916200020d565b604051806040016040528060058152602001644469636b7360d81b815250604051806040016040528060058152602001644449434b5360d81b8152508160009080519060200190620000b892919062000167565b508051620000ce90600190602084019062000167565b505050620000eb620000e56200011160201b60201c565b62000115565b600780546001600160a01b0319166001600160a01b03929092169190911790556200027b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000175906200023f565b90600052602060002090601f016020900481019282620001995760008555620001e4565b82601f10620001b457805160ff1916838001178555620001e4565b82800160010185558215620001e4579182015b82811115620001e4578251825591602001919060010190620001c7565b50620001f2929150620001f6565b5090565b5b80821115620001f25760008155600101620001f7565b6000602082840312156200022057600080fd5b81516001600160a01b03811681146200023857600080fd5b9392505050565b600181811c908216806200025457607f821691505b6020821081036200027557634e487b7160e01b600052602260045260246000fd5b50919050565b612216806200028b6000396000f3fe60806040526004361061020f5760003560e01c80634f6ccce711610118578063b4c7f066116100a0578063e0d4ea371161006f578063e0d4ea37146105c5578063e94053c7146105e5578063e985e9c51461062d578063f2fde38b14610676578063f8bf51721461069657600080fd5b8063b4c7f0661461054f578063b88d4fde1461056f578063c87b56dd1461058f578063d5abeb01146105af57600080fd5b80637dc2268c116100e75780637dc2268c146104cf5780638da5cb5b146104e957806395d89b4114610507578063a22cb4651461051c578063a71bbebe1461053c57600080fd5b80634f6ccce71461045a5780636352211e1461047a57806370a082311461049a578063715018a6146104ba57600080fd5b806323b872dd1161019b5780633bb2c9381161016a5780633bb2c938146103dd5780633ccfd60b146103f257806342842e0e146103fa57806342966c681461041a5780634d9c18481461043a57600080fd5b806323b872dd1461035e5780632f745c591461037e578063303e74df1461039e57806333101e1f146103be57600080fd5b8063081812fc116101e2578063081812fc146102ad578063095ea7b3146102e557806313faede614610305578063176b72b41461032957806318160ddd1461034957600080fd5b806301b9a3971461021457806301ffc9a71461023657806306421c2f1461026b57806306fdde031461028b575b600080fd5b34801561022057600080fd5b5061023461022f366004611b7c565b6106b3565b005b34801561024257600080fd5b50610256610251366004611baf565b6106dd565b60405190151581526020015b60405180910390f35b34801561027757600080fd5b50610234610286366004611bcc565b610708565b34801561029757600080fd5b506102a0610719565b6040516102629190611c48565b3480156102b957600080fd5b506102cd6102c8366004611c5b565b6107ab565b6040516001600160a01b039091168152602001610262565b3480156102f157600080fd5b50610234610300366004611c74565b61081e565b34801561031157600080fd5b5061031b600a5481565b604051908152602001610262565b34801561033557600080fd5b50610234610344366004611ca0565b610933565b34801561035557600080fd5b5061031b6109d9565b34801561036a57600080fd5b50610234610379366004611cc2565b610a36565b34801561038a57600080fd5b5061031b610399366004611c74565b610a68565b3480156103aa57600080fd5b506007546102cd906001600160a01b031681565b3480156103ca57600080fd5b50600b5461025690610100900460ff1681565b3480156103e957600080fd5b50610234610b09565b610234610b1e565b34801561040657600080fd5b50610234610415366004611cc2565b610b9a565b34801561042657600080fd5b50610234610435366004611c5b565b610bb5565b34801561044657600080fd5b50610234610455366004611d03565b610c1a565b34801561046657600080fd5b5061031b610475366004611c5b565b610c3a565b34801561048657600080fd5b506102cd610495366004611c5b565b610ca7565b3480156104a657600080fd5b5061031b6104b5366004611b7c565b610d1c565b3480156104c657600080fd5b50610234610ddc565b3480156104db57600080fd5b50600b546102569060ff1681565b3480156104f557600080fd5b506005546001600160a01b03166102cd565b34801561051357600080fd5b506102a0610df0565b34801561052857600080fd5b50610234610537366004611d3b565b610dff565b61023461054a366004611d70565b610ec3565b34801561055b57600080fd5b5061023461056a366004611d96565b61116a565b34801561057b57600080fd5b5061023461058a366004611e20565b611185565b34801561059b57600080fd5b506102a06105aa366004611c5b565b6111b7565b3480156105bb57600080fd5b5061031b60085481565b3480156105d157600080fd5b5061031b6105e0366004611c5b565b611294565b3480156105f157600080fd5b50610618610600366004611b7c565b600c6020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610262565b34801561063957600080fd5b50610256610648366004611ecf565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561068257600080fd5b50610234610691366004611b7c565b6112f5565b3480156106a257600080fd5b506009546106189063ffffffff1681565b6106bb61136b565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b0319821663780e9d6360e01b14806107025750610702826113c5565b92915050565b61071061136b565b61ffff16600855565b60606000805461072890611f08565b80601f016020809104026020016040519081016040528092919081815260200182805461075490611f08565b80156107a15780601f10610776576101008083540402835291602001916107a1565b820191906000526020600020905b81548152906001019060200180831161078457829003601f168201915b5050505050905090565b60006107b682611415565b6108025760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061082982610ca7565b9050806001600160a01b0316836001600160a01b0316036108965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f9565b336001600160a01b03821614806108b257506108b28133610648565b6109245760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f9565b61092e838361145f565b505050565b61093b61136b565b600b54610100900460ff166109885760405162461bcd60e51b815260206004820152601360248201527210d85b9b9bdd081cd95d081d1a19481cd95959606a1b60448201526064016107f9565b600082815260066020526040908190208290555182907faabfe5e8bccf1a1352f72b557ce580211305c37f88d5783ae467a1ba5e0761e0906109cd9084815260200190565b60405180910390a25050565b60008060005b600254811015610a305760006001600160a01b031660028281548110610a0757610a07611f3c565b6000918252602090912001546001600160a01b031614610a28578160010191505b6001016109df565b50919050565b610a41335b826114cd565b610a5d5760405162461bcd60e51b81526004016107f990611f52565b61092e83838361154c565b6000610a7383610d1c565b8210610a915760405162461bcd60e51b81526004016107f990611f9f565b6000805b600254811015610af05760028181548110610ab257610ab2611f3c565b6000918252602090912001546001600160a01b0390811690861603610ae857838203610ae15791506107029050565b8160010191505b600101610a95565b5060405162461bcd60e51b81526004016107f990611f9f565b610b1161136b565b600b805461ff0019169055565b610b2661136b565b6000610b3a6005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b84576040519150601f19603f3d011682016040523d82523d6000602084013e610b89565b606091505b5050905080610b9757600080fd5b50565b61092e83838360405180602001604052806000815250611185565b610bbe33610a3b565b610c025760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b60448201526064016107f9565b600081815260066020526040812055610b97816116b2565b610c2261136b565b6009805463ffffffff191660ff909216919091179055565b6002546000908210610ca35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107f9565b5090565b60008060028381548110610cbd57610cbd611f3c565b6000918252602090912001546001600160a01b03169050806107025760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107f9565b60006001600160a01b038216610d865760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107f9565b6000805b600254811015610dd55760028181548110610da757610da7611f3c565b6000918252602090912001546001600160a01b0390811690851603610dcd578160010191505b600101610d8a565b5092915050565b610de461136b565b610dee6000611743565b565b60606001805461072890611f08565b6001600160a01b0382163303610e575760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f9565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336000908152600c6020526040902054600b5463ffffffff9091169060ff16610f435760405162461bcd60e51b815260206004820152602c60248201527f4d696e74696e67206e6565647320746f20626520656e61626c656420746f207360448201526b74617274206d696e74696e6760a01b60648201526084016107f9565b60658263ffffffff1610610f995760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e0000000060448201526064016107f9565b60025460085463ffffffff8416820110610feb5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc1039bab838363c9760691b60448201526064016107f9565b60095463ffffffff9081169083161061105c578263ffffffff16600a546110129190612000565b3410156110575760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016107f9565b6110ef565b6000611068838561201f565b60095490915063ffffffff90811690821611156110ed576009546110929063ffffffff1682612047565b90508063ffffffff16600a546110a89190612000565b3410156110ed5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016107f9565b505b6110f9828461201f565b336000908152600c60205260408120805463ffffffff191663ffffffff93909316929092179091555b8363ffffffff168163ffffffff1610156111645761113f82611795565b6000838152600660205260409020556111583383611923565b60019182019101611122565b50505050565b61117261136b565b600b805460ff1916911515919091179055565b61118f33836114cd565b6111ab5760405162461bcd60e51b81526004016107f990611f52565b611164848484846119f5565b60606111c282611415565b6112055760405162461bcd60e51b81526020600482015260146024820152732234b1b5903237b2b9903737ba1032bc34b9ba1760611b60448201526064016107f9565b600082815260066020526040908190205460075491516392cb829d60e01b8152600481018590526024810182905290916001600160a01b0316906392cb829d90604401600060405180830381865afa158015611265573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261128d919081019061206c565b9392505050565b600061129f82611415565b6112e25760405162461bcd60e51b81526020600482015260146024820152732234b1b5903237b2b9903737ba1032bc34b9ba1760611b60448201526064016107f9565b5060009081526006602052604090205490565b6112fd61136b565b6001600160a01b0381166113625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f9565b610b9781611743565b6005546001600160a01b03163314610dee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107f9565b60006001600160e01b031982166380ac58cd60e01b14806113f657506001600160e01b03198216635b5e139f60e01b145b8061070257506301ffc9a760e01b6001600160e01b0319831614610702565b60025460009082108015610702575060006001600160a01b03166002838154811061144257611442611f3c565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061149482610ca7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806114d983610ca7565b9050806001600160a01b0316846001600160a01b0316148061152057506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b806115445750836001600160a01b0316611539846107ab565b6001600160a01b0316145b949350505050565b826001600160a01b031661155f82610ca7565b6001600160a01b0316146115c35760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107f9565b6001600160a01b0382166116255760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f9565b600081815260036020526040902080546001600160a01b0319169055600280548391908390811061165857611658611f3c565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b60006116bd82610ca7565b600083815260036020526040902080546001600160a01b03191690556002805491925090839081106116f1576116f1611f3c565b6000918252602082200180546001600160a01b03191690556040518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806117a183611a28565b905060006117b46014603084901c6120e3565b6117bf90600a612105565b6117ca6007846120e3565b6117d590600a612105565b6117e0906064612000565b6117ea9190612105565b905060006117fd6014606085901c6120e3565b61180890600a612105565b6118176006606086901c6120e3565b61182290600a612105565b61182d906064612000565b6118379190612105565b9050600061184a601460c086901c6120e3565b61185590600a612105565b611864600260c087901c6120e3565b61186f90600a612105565b61187a906064612000565b6118849190612105565b905060006118976014609087901c6120e3565b6118a290600a612105565b6118b16007609088901c6120e3565b6118bc90600a612105565b6118c7906064612000565b6118d19190612105565b90508181846118e287612710612000565b6118ec9190612105565b6118f890612710612000565b6119029190612105565b61190e90612710612000565b6119189190612105565b979650505050505050565b61192c81611415565b156119795760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f9565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611a0084848461154c565b611a0c84848484611a66565b6111645760405162461bcd60e51b81526004016107f99061211d565b6000611a3560014361216f565b6040805191406020830152810183905260600160408051601f19818403018152919052805160209091012092915050565b60006001600160a01b0384163b15611b5c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611aaa903390899088908890600401612186565b6020604051808303816000875af1925050508015611ae5575060408051601f3d908101601f19168201909252611ae2918101906121c3565b60015b611b42573d808015611b13576040519150601f19603f3d011682016040523d82523d6000602084013e611b18565b606091505b508051600003611b3a5760405162461bcd60e51b81526004016107f99061211d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611544565b506001949350505050565b6001600160a01b0381168114610b9757600080fd5b600060208284031215611b8e57600080fd5b813561128d81611b67565b6001600160e01b031981168114610b9757600080fd5b600060208284031215611bc157600080fd5b813561128d81611b99565b600060208284031215611bde57600080fd5b813561ffff8116811461128d57600080fd5b60005b83811015611c0b578181015183820152602001611bf3565b838111156111645750506000910152565b60008151808452611c34816020860160208601611bf0565b601f01601f19169290920160200192915050565b60208152600061128d6020830184611c1c565b600060208284031215611c6d57600080fd5b5035919050565b60008060408385031215611c8757600080fd5b8235611c9281611b67565b946020939093013593505050565b60008060408385031215611cb357600080fd5b50508035926020909101359150565b600080600060608486031215611cd757600080fd5b8335611ce281611b67565b92506020840135611cf281611b67565b929592945050506040919091013590565b600060208284031215611d1557600080fd5b813560ff8116811461128d57600080fd5b80358015158114611d3657600080fd5b919050565b60008060408385031215611d4e57600080fd5b8235611d5981611b67565b9150611d6760208401611d26565b90509250929050565b600060208284031215611d8257600080fd5b813563ffffffff8116811461128d57600080fd5b600060208284031215611da857600080fd5b61128d82611d26565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611df057611df0611db1565b604052919050565b600067ffffffffffffffff821115611e1257611e12611db1565b50601f01601f191660200190565b60008060008060808587031215611e3657600080fd5b8435611e4181611b67565b93506020850135611e5181611b67565b925060408501359150606085013567ffffffffffffffff811115611e7457600080fd5b8501601f81018713611e8557600080fd5b8035611e98611e9382611df8565b611dc7565b818152886020838501011115611ead57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611ee257600080fd5b8235611eed81611b67565b91506020830135611efd81611b67565b809150509250929050565b600181811c90821680611f1c57607f821691505b602082108103610a3057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561201a5761201a611fea565b500290565b600063ffffffff80831681851680830382111561203e5761203e611fea565b01949350505050565b600063ffffffff8381169083168181101561206457612064611fea565b039392505050565b60006020828403121561207e57600080fd5b815167ffffffffffffffff81111561209557600080fd5b8201601f810184136120a657600080fd5b80516120b4611e9382611df8565b8181528560208385010111156120c957600080fd5b6120da826020830160208601611bf0565b95945050505050565b60008261210057634e487b7160e01b600052601260045260246000fd5b500690565b6000821982111561211857612118611fea565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008282101561218157612181611fea565b500390565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121b990830184611c1c565b9695505050505050565b6000602082840312156121d557600080fd5b815161128d81611b9956fea26469706673582212200d973f3b56faeec4ee1701bc5d18948ab58caedb0a08677ee74f666143d2ec2a64736f6c634300080d003300000000000000000000000097f997dfceb2451744a0b9015fb79632528f6344