60806040523480156200001157600080fd5b50604080518082018252600c8082526b43727970746f536b756c6c7360a01b602080840182815285518087019096529285528401528151919291620000599160009162000119565b5080516200006f90600190602084019062000119565b5050506200008c62000086620000c360201b60201c565b620000c7565b6040518060600160405280602281526020016200230a602291398051620000bc9160089160209091019062000119565b50620001fc565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012790620001bf565b90600052602060002090601f0160209004810192826200014b576000855562000196565b82601f106200016657805160ff191683800117855562000196565b8280016001018555821562000196579182015b828111156200019657825182559160200191906001019062000179565b50620001a4929150620001a8565b5090565b5b80821115620001a45760008155600101620001a9565b600181811c90821680620001d457607f821691505b60208210811415620001f657634e487b7160e01b600052602260045260246000fd5b50919050565b6120fe806200020c6000396000f3fe6080604052600436106101725760003560e01c806370a08231116100c8578063b88d4fde11610084578063c87b56dd11610061578063c87b56dd14610437578063e985e9c514610457578063ec7e707f146104a0578063f2fde38b146104c057005b8063b88d4fde146103db578063c002d23d146103fb578063c10026161461041757005b806370a0823114610325578063715018a6146103535780638da5cb5b14610368578063907071211461038657806395d89b41146103a6578063a22cb465146103bb57005b806323b872dd1161012f57806355f804b31161010c57806355f804b3146102bd57806361150375146102dd5780636352211e146102f05780636c0360eb1461031057005b806323b872dd1461026a57806342842e0e1461028a5780634e6cca8f146102aa57005b8062f714ce1461017b57806301ffc9a71461019b57806306fdde03146101d0578063081812fc146101f2578063095ea7b31461022a5780630b63fd621461024a57005b3661017957005b005b34801561018757600080fd5b50610179610196366004611cf4565b6104e0565b3480156101a757600080fd5b506101bb6101b6366004611c58565b61059e565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101e56105f0565b6040516101c79190611e46565b3480156101fe57600080fd5b5061021261020d366004611cdb565b610682565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50610179610245366004611be9565b610717565b34801561025657600080fd5b506101bb610265366004611be9565b610828565b34801561027657600080fd5b50610179610285366004611af5565b6108a7565b34801561029657600080fd5b506101796102a5366004611af5565b6108d8565b6101796102b8366004611d17565b6108f3565b3480156102c957600080fd5b506101796102d8366004611c92565b610a03565b6101796102eb366004611d5e565b610a44565b3480156102fc57600080fd5b5061021261030b366004611cdb565b610b4a565b34801561031c57600080fd5b506101e5610bc1565b34801561033157600080fd5b50610345610340366004611aa7565b610bd0565b6040519081526020016101c7565b34801561035f57600080fd5b50610179610c57565b34801561037457600080fd5b506006546001600160a01b0316610212565b34801561039257600080fd5b506101796103a1366004611cdb565b610c8d565b3480156103b257600080fd5b506101e5610cfb565b3480156103c757600080fd5b506101796103d6366004611bad565b610d0a565b3480156103e757600080fd5b506101796103f6366004611b31565b610d7e565b34801561040757600080fd5b506103456701aa535d3d0c000081565b34801561042357600080fd5b506101bb610432366004611cdb565b610db0565b34801561044357600080fd5b506101e5610452366004611cdb565b610e0c565b34801561046357600080fd5b506101bb610472366004611ac2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104ac57600080fd5b506101796104bb366004611c13565b610ec3565b3480156104cc57600080fd5b506101796104db366004611aa7565b611044565b6006546001600160a01b031633146105135760405162461bcd60e51b815260040161050a90611eab565b60405180910390fd5b478211156105635760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420746869732062616c616e636500000000000000604482015260640161050a565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610599573d6000803e3d6000fd5b505050565b60006001600160e01b031982166380ac58cd60e01b14806105cf57506001600160e01b03198216635b5e139f60e01b145b806105ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546105ff90611ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461062b90611ff0565b80156106785780601f1061064d57610100808354040283529160200191610678565b820191906000526020600020905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106fb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161050a565b506000908152600460205260409020546001600160a01b031690565b600061072282610b4a565b9050806001600160a01b0316836001600160a01b031614156107905760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161050a565b336001600160a01b03821614806107ac57506107ac8133610472565b61081e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161050a565b61059983836110dc565b600080826001141561085257506001600160a01b03831660009081526009602052604090205460ff165b826002141561087957506001600160a01b0383166000908152600a602052604090205460ff165b82600314156108a057506001600160a01b0383166000908152600b602052604090205460ff165b9392505050565b6108b1338261114a565b6108cd5760405162461bcd60e51b815260040161050a90611ee0565b610599838383611241565b61059983838360405180602001604052806000815250610d7e565b600c54610100900460ff161561094b5760405162461bcd60e51b815260206004820152601f60248201527f5075626c69632073616c654d696e7420686173206e6f74207374617274656400604482015260640161050a565b336000908152600a602052604090205460ff166109c257610974826701aa535d3d0c0000611f8e565b34146109c25760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420457468657220616d6f756e742073656e7400000000000000604482015260640161050a565b60005b8151811015610599576109f1838383815181106109e4576109e4612086565b60200260200101516113e1565b806109fb8161202b565b9150506109c5565b6006546001600160a01b03163314610a2d5760405162461bcd60e51b815260040161050a90611eab565b8051610a40906008906020840190611912565b5050565b336000908152600b602052604090205460ff16610aa35760405162461bcd60e51b815260206004820181905260248201527f5075626c69632073616c654d696e747320686173206e6f742073746172746564604482015260640161050a565b60005b8251811015610b445760015b848111610b3157610ac28361202b565b925082848381518110610ad757610ad7612086565b60200260200101516001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480610b298161202b565b915050610ab2565b5080610b3c8161202b565b915050610aa6565b50505050565b6000818152600260205260408120546001600160a01b0316806105ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161050a565b6060600880546105ff90611ff0565b60006001600160a01b038216610c3b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161050a565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610c815760405162461bcd60e51b815260040161050a90611eab565b610c8b6000611424565b565b6006546001600160a01b03163314610cb75760405162461bcd60e51b815260040161050a90611eab565b8060011415610cd357600c805460ff19811660ff909116151790555b8060021415610cf857600c805461ff001981166101009182900460ff16159091021790555b50565b6060600180546105ff90611ff0565b600c5460ff16610d73573360009081526009602052604090205460ff16610d735760405162461bcd60e51b815260206004820152601a60248201527f4552433732313a20617070726f766520746f2063616c6c65722e000000000000604482015260640161050a565b610a40338383611476565b610d88338361114a565b610da45760405162461bcd60e51b815260040161050a90611ee0565b610b4484848484611545565b6006546000906001600160a01b03163314610ddd5760405162461bcd60e51b815260040161050a90611eab565b60008260011415610df05750600c5460ff165b82600214156105ea575050600c54610100900460ff165b919050565b6000818152600260205260409020546060906001600160a01b0316610e8b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161050a565b610e93610bc1565b610e9c83611578565b604051602001610ead929190611dda565b6040516020818303038152906040529050919050565b6006546001600160a01b03163314610eed5760405162461bcd60e51b815260040161050a90611eab565b8060011415610f605760005b8251811015610f5e57600160096000858481518110610f1a57610f1a612086565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f568161202b565b915050610ef9565b505b8060021415610fd35760005b8251811015610fd1576001600a6000858481518110610f8d57610f8d612086565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610fc98161202b565b915050610f6c565b505b8060031415610a405760005b8251811015610599576001600b600085848151811061100057611000612086565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061103c8161202b565b915050610fdf565b6006546001600160a01b0316331461106e5760405162461bcd60e51b815260040161050a90611eab565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050a565b610cf881611424565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061111182610b4a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111c35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161050a565b60006111ce83610b4a565b9050806001600160a01b0316846001600160a01b031614806112095750836001600160a01b03166111fe84610682565b6001600160a01b0316145b8061123957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661125482610b4a565b6001600160a01b0316146112bc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161050a565b6001600160a01b03821661131e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161050a565b6113296000826110dc565b6001600160a01b0383166000908152600360205260408120805460019290611352908490611fad565b90915550506001600160a01b0382166000908152600360205260408120805460019290611380908490611f62565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b82811015610599576001600760008282546113ff9190611f62565b9250508190555061141282600754611676565b8061141c8161202b565b9150506113e4565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156114d85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161050a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611550848484611241565b61155c84848484611690565b610b445760405162461bcd60e51b815260040161050a90611e59565b60608161159c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115c657806115b08161202b565b91506115bf9050600a83611f7a565b91506115a0565b60008167ffffffffffffffff8111156115e1576115e161209c565b6040519080825280601f01601f19166020018201604052801561160b576020820181803683370190505b5090505b841561123957611620600183611fad565b915061162d600a86612046565b611638906030611f62565b60f81b81838151811061164d5761164d612086565b60200101906001600160f81b031916908160001a90535061166f600a86611f7a565b945061160f565b610a4082826040518060200160405280600081525061179d565b60006001600160a01b0384163b1561179257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906116d4903390899088908890600401611e09565b602060405180830381600087803b1580156116ee57600080fd5b505af192505050801561171e575060408051601f3d908101601f1916820190925261171b91810190611c75565b60015b611778573d80801561174c576040519150601f19603f3d011682016040523d82523d6000602084013e611751565b606091505b5080516117705760405162461bcd60e51b815260040161050a90611e59565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611239565b506001949350505050565b6117a783836117d0565b6117b46000848484611690565b6105995760405162461bcd60e51b815260040161050a90611e59565b6001600160a01b0382166118265760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161050a565b6000818152600260205260409020546001600160a01b03161561188b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161050a565b6001600160a01b03821660009081526003602052604081208054600192906118b4908490611f62565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461191e90611ff0565b90600052602060002090601f0160209004810192826119405760008555611986565b82601f1061195957805160ff1916838001178555611986565b82800160010185558215611986579182015b8281111561198657825182559160200191906001019061196b565b50611992929150611996565b5090565b5b808211156119925760008155600101611997565b600067ffffffffffffffff8311156119c5576119c561209c565b6119d8601f8401601f1916602001611f31565b90508281528383830111156119ec57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114610e0757600080fd5b600082601f830112611a2b57600080fd5b8135602067ffffffffffffffff821115611a4757611a4761209c565b8160051b611a56828201611f31565b838152828101908684018388018501891015611a7157600080fd5b600093505b85841015611a9b57611a8781611a03565b835260019390930192918401918401611a76565b50979650505050505050565b600060208284031215611ab957600080fd5b6108a082611a03565b60008060408385031215611ad557600080fd5b611ade83611a03565b9150611aec60208401611a03565b90509250929050565b600080600060608486031215611b0a57600080fd5b611b1384611a03565b9250611b2160208501611a03565b9150604084013590509250925092565b60008060008060808587031215611b4757600080fd5b611b5085611a03565b9350611b5e60208601611a03565b925060408501359150606085013567ffffffffffffffff811115611b8157600080fd5b8501601f81018713611b9257600080fd5b611ba1878235602084016119ab565b91505092959194509250565b60008060408385031215611bc057600080fd5b611bc983611a03565b915060208301358015158114611bde57600080fd5b809150509250929050565b60008060408385031215611bfc57600080fd5b611c0583611a03565b946020939093013593505050565b60008060408385031215611c2657600080fd5b823567ffffffffffffffff811115611c3d57600080fd5b611c4985828601611a1a565b95602094909401359450505050565b600060208284031215611c6a57600080fd5b81356108a0816120b2565b600060208284031215611c8757600080fd5b81516108a0816120b2565b600060208284031215611ca457600080fd5b813567ffffffffffffffff811115611cbb57600080fd5b8201601f81018413611ccc57600080fd5b611239848235602084016119ab565b600060208284031215611ced57600080fd5b5035919050565b60008060408385031215611d0757600080fd5b82359150611aec60208401611a03565b60008060408385031215611d2a57600080fd5b82359150602083013567ffffffffffffffff811115611d4857600080fd5b611d5485828601611a1a565b9150509250929050565b600080600060608486031215611d7357600080fd5b83359250602084013567ffffffffffffffff811115611d9157600080fd5b611d9d86828701611a1a565b925050604084013590509250925092565b60008151808452611dc6816020860160208601611fc4565b601f01601f19169290920160200192915050565b60008351611dec818460208801611fc4565b835190830190611e00818360208801611fc4565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e3c90830184611dae565b9695505050505050565b6020815260006108a06020830184611dae565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f5a57611f5a61209c565b604052919050565b60008219821115611f7557611f7561205a565b500190565b600082611f8957611f89612070565b500490565b6000816000190483118215151615611fa857611fa861205a565b500290565b600082821015611fbf57611fbf61205a565b500390565b60005b83811015611fdf578181015183820152602001611fc7565b83811115610b445750506000910152565b600181811c9082168061200457607f821691505b6020821081141561202557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561203f5761203f61205a565b5060010190565b60008261205557612055612070565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cf857600080fdfea26469706673582212205f0861a5f86624866d0b8a1472b44d819b8ead10c21df03a819302b34c52365a64736f6c63430008070033687474703a2f2f6170692e63727970746f2d736b756c6c732e636f6d2f697066732f