0x60806040523480156200001157600080fd5b506040516200220f3803806200220f833981016040819052620000349162000280565b6200003f336200014d565b826001600160a01b038116620000685760405163d92e233d60e01b815260040160405180910390fd5b826001600160a01b038116620000915760405163d92e233d60e01b815260040160405180910390fd5b826001600160a01b038116620000ba5760405163d92e233d60e01b815260040160405180910390fd5b6040516c11915157d49150d25412515395609a1b6020820152620000fe90602d0160405160208183030381529060405280519060200120876200019d60201b60201c565b5050600280546001600160a01b039586166001600160a01b03199182161790915560038054948616948216851790556001805482169094179093555060048054919093169116179055620002ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001a762000202565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551909184917f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a953999190a35050565b6000546001600160a01b03163314620002615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b80516001600160a01b03811681146200027b57600080fd5b919050565b6000806000606084860312156200029657600080fd5b620002a18462000263565b9250620002b16020850162000263565b9150620002c16040850162000263565b90509250925092565b611f3580620002da6000396000f3fe6080604052600436106101635760003560e01c806378548a3e116100c0578063d547741f11610074578063f2fde38b11610059578063f2fde38b14610391578063f887ea40146103b1578063f8fc08b9146103d157600080fd5b8063d547741f14610351578063dfef6beb1461037157600080fd5b80638da5cb5b116100a55780638da5cb5b146102df57806395cb3ec6146102fd578063c84fe3df1461033157600080fd5b806378548a3e146102ac5780637a5de2a9146102bf57600080fd5b806336cf62a01161011757806346904840116100fc57806346904840146102575780634f0e0ef314610277578063715018a61461029757600080fd5b806336cf62a01461022457806338ed17391461024457600080fd5b8063236040711161014857806323604071146101ac5780632f2ff15d146101cc578063341a10e0146101ec57600080fd5b80630c5025831461016f5780631c721a9d1461019557600080fd5b3661016a57005b600080fd5b61018261017d36600461195e565b61041c565b6040519081526020015b60405180910390f35b3480156101a157600080fd5b506101aa61082a565b005b3480156101b857600080fd5b506101aa6101c73660046119cf565b6108d7565b3480156101d857600080fd5b506101aa6101e73660046119ea565b6109d7565b3480156101f857600080fd5b5060035461020c906001600160a01b031681565b6040516001600160a01b03909116815260200161018c565b34801561023057600080fd5b506101aa61023f3660046119cf565b610a3a565b610182610252366004611ae1565b610ac1565b34801561026357600080fd5b5060025461020c906001600160a01b031681565b34801561028357600080fd5b5060045461020c906001600160a01b031681565b3480156102a357600080fd5b506101aa610bb8565b6101826102ba366004611b4a565b610bcc565b3480156102cb57600080fd5b506101aa6102da3660046119cf565b610e8c565b3480156102eb57600080fd5b506000546001600160a01b031661020c565b34801561030957600080fd5b5061031d610318366004611c32565b610f07565b60405162ffffff909116815260200161018c565b34801561033d57600080fd5b506101aa61034c366004611c4b565b610f65565b34801561035d57600080fd5b506101aa61036c3660046119ea565b61127c565b34801561037d57600080fd5b5061020c61038c366004611c32565b6112dc565b34801561039d57600080fd5b506101aa6103ac3660046119cf565b611335565b3480156103bd57600080fd5b5060015461020c906001600160a01b031681565b3480156103dd57600080fd5b5061040c6103ec3660046119ea565b600660209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161018c565b6000806040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020016104518a610f07565b62ffffff168152602001886001600160a01b0316815260200187815260200186815260200161047f866112dc565b6001600160a01b039081169091526004549192508b811691160361058b576001546001600160a01b03166304e45aaf6104b88534611c9e565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815285516001600160a01b0390811660048301526020870151811660248301529186015162ffffff1660448201526060860151821660648201526080860151608482015260a086015160a482015260c086015190911660c482015260e40160206040518083038185885af115801561055f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906105849190611cb7565b91506107e7565b896105ad333061059b878b611cd0565b6001600160a01b0385169291906113c5565b6105b7818861145d565b6004546001600160a01b03808c1691160361072a573060608301908152600154604080516304e45aaf60e01b815285516001600160a01b0390811660048301526020870151811660248301529186015162ffffff1660448201529251811660648401526080850151608484015260a085015160a484015260c0850151811660c484015216906304e45aaf9060e4016020604051808303816000875af1158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190611cb7565b60048054604051632e1a7d4d60e01b81529295506001600160a01b031691632e1a7d4d916106bc9187910190815260200190565b600060405180830381600087803b1580156106d657600080fd5b505af11580156106ea573d6000803e3d6000fd5b50506040516001600160a01b038b16925085156108fc02915085906000818181858888f19350505050158015610724573d6000803e3d6000fd5b506107e5565b600154604080516304e45aaf60e01b815284516001600160a01b0390811660048301526020860151811660248301529185015162ffffff1660448201526060850151821660648201526080850151608482015260a085015160a482015260c0850151821660c48201529116906304e45aaf9060e4016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611cb7565b92505b505b60405182906001600160a01b038916907f5388c454f0414a5a0fac19c275734ddde5c33cb8f7f84d8335567e954a7177b690600090a35098975050505050505050565b6040516c11915157d49150d25412515395609a1b6020820152602d0160408051601f19818403018152918152815160209283012060008181526006845282812033825290935290822054909160ff9091161515900361089b576040516282b42960e81b815260040160405180910390fd5b47600080808047335af150604051819033907f52a6cdf67c40ce333b3d846e4e143db87f71dd7935612a4cafcf6ba76047ca1f90600090a35050565b6108df6114f8565b806001600160a01b0381166109075760405163d92e233d60e01b815260040160405180910390fd5b6040516c11915157d49150d25412515395609a1b602082015261095090602d0160408051601f1981840301815291905280516020909101206002546001600160a01b031661127c565b6040516c11915157d49150d25412515395609a1b602082015261098c90602d0160405160208183030381529060405280519060200120836109d7565b600280546001600160a01b0319166001600160a01b0384169081179091556040517f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290600090a25050565b6109df6114f8565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551909184917f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a953999190a35050565b610a426114f8565b806001600160a01b038116610a6a5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0384166001600160a01b0319918216811790925560018054909116821790556040517f8ca8593febbed3bd243d2c96b80893cf0db57f85a2850286eea8c037cd9395be90600090a25050565b60008084600081518110610ad757610ad7611ce3565b60200260200101519050610af23330858a61059b9190611cd0565b610afc818861145d565b60015460405163472b43f360e01b81526001600160a01b039091169063472b43f390610b32908a908a908a908a90600401611cf9565b6020604051808303816000875af1158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190611cb7565b915081846001600160a01b03167f5388c454f0414a5a0fac19c275734ddde5c33cb8f7f84d8335567e954a7177b660405160405180910390a35095945050505050565b610bc06114f8565b610bca6000611552565b565b604080516080810182528881526001600160a01b03808916602083015291810187905260608101869052600454600092858116911603610c88576001546001600160a01b031663b858183f610c218734611c9e565b836040518363ffffffff1660e01b8152600401610c3e9190611db9565b60206040518083038185885af1158015610c5c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c819190611cb7565b9150610e4a565b83610c98333061059b898c611cd0565b610ca2818961145d565b6004546001600160a01b03808616911603610dd25730602083015260015460405163b858183f60e01b81526001600160a01b039091169063b858183f90610ced908590600401611db9565b6020604051808303816000875af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190611cb7565b60048054604051632e1a7d4d60e01b81529295506001600160a01b031691632e1a7d4d91610d649187910190815260200190565b600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50506040516001600160a01b038c16925085156108fc02915085906000818181858888f19350505050158015610dcc573d6000803e3d6000fd5b50610e48565b60015460405163b858183f60e01b81526001600160a01b039091169063b858183f90610e02908590600401611db9565b6020604051808303816000875af1158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611cb7565b92505b505b60405182906001600160a01b038a16907f5388c454f0414a5a0fac19c275734ddde5c33cb8f7f84d8335567e954a7177b690600090a350979650505050505050565b610e946114f8565b806001600160a01b038116610ebc5760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0384169081179091556040517f8ca8593febbed3bd243d2c96b80893cf0db57f85a2850286eea8c037cd9395be90600090a25050565b600062ffffff821115610f615760405162461bcd60e51b815260206004820152601d60248201527f76616c756520646f6573206e6f742066697420696e203234206269747300000060448201526064015b60405180910390fd5b5090565b6040516c11915157d49150d25412515395609a1b6020820152602d0160408051601f19818403018152918152815160209283012060008181526006845282812033825290935290822054909160ff90911615159003610fd6576040516282b42960e81b815260040160405180910390fd5b815160005b81811015611276576000848281518110610ff757610ff7611ce3565b60209081029190910101516040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561104c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110709190611cb7565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af19250505080156110dc575060408051601f3d908101601f191682019092526110d991810190611e08565b60015b6111a5576110e8611e2a565b806308c379a00361114457506110fc611e46565b806111075750611146565b7fb231ff64afc0b0c2fbc638c8a22b110477babe1bbeec326dd64a7b7b79275e19816040516111369190611ed0565b60405180910390a15061126c565b505b3d808015611170576040519150601f19603f3d011682016040523d82523d6000602084013e611175565b606091505b507f611bec54a46369c648bf786a8f8ac326a17f8e212eb5ac1b4d12c31621319713816040516111369190611ed0565b801561120a5781336001600160a01b03168886815181106111c8576111c8611ce3565b60200260200101516001600160a01b03167f8fb5966fa4703c29d268f90be396c14771e77d796bea76ca74eddb52e5b370ab60405160405180910390a461126a565b7fdb8f052da12f750d5b8f6facd5d8499d02c1be4e49cc1f687dd1e2817b46e99a87858151811061123d5761123d611ce3565b602002602001015160405161126191906001600160a01b0391909116815260200190565b60405180910390a15b505b5050600101610fdb565b50505050565b6112846114f8565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551909184917f76e6093c136cd7faa5a6d92b2b633f3b4595abd4a529b7a13917398355fea6949190a35050565b60006001600160a01b03821115610f615760405162461bcd60e51b815260206004820152601e60248201527f76616c756520646f6573206e6f742066697420696e20313630206269747300006044820152606401610f58565b61133d6114f8565b6001600160a01b0381166113b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f58565b6113c281611552565b50565b6040516001600160a01b03808516602483015283166044820152606481018290526112769085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526115a2565b600354604051636eb1769f60e11b81523060048201526001600160a01b039182166024820152829184169063dd62ed3e90604401602060405180830381865afa1580156114ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d29190611cb7565b10156114f4576003546114f4906001600160a01b03848116911660001961168c565b5050565b6000546001600160a01b03163314610bca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f58565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006115f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117a89092919063ffffffff16565b80519091501561168757808060200190518101906116159190611e08565b6116875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f58565b505050565b8015806117065750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117049190611cb7565b155b6117785760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610f58565b6040516001600160a01b03831660248201526044810182905261168790849063095ea7b360e01b906064016113f9565b60606117b784846000856117c1565b90505b9392505050565b6060824710156118395760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f58565b6001600160a01b0385163b6118905760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f58565b600080866001600160a01b031685876040516118ac9190611ee3565b60006040518083038185875af1925050503d80600081146118e9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ee565b606091505b50915091506118fe828286611909565b979650505050505050565b606083156119185750816117ba565b8251156119285782518084602001fd5b8160405162461bcd60e51b8152600401610f589190611ed0565b80356001600160a01b038116811461195957600080fd5b919050565b600080600080600080600080610100898b03121561197b57600080fd5b61198489611942565b975061199260208a01611942565b9650604089013595506119a760608a01611942565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b6000602082840312156119e157600080fd5b6117ba82611942565b600080604083850312156119fd57600080fd5b82359150611a0d60208401611942565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611a5257611a52611a16565b6040525050565b600082601f830112611a6a57600080fd5b8135602067ffffffffffffffff821115611a8657611a86611a16565b8160051b604051611a9983830182611a2c565b92835284810182019282810187851115611ab257600080fd5b83870192505b84831015611ad657611ac983611942565b8152918301918301611ab8565b509695505050505050565b600080600080600060a08688031215611af957600080fd5b8535945060208601359350604086013567ffffffffffffffff811115611b1e57600080fd5b611b2a88828901611a59565b935050611b3960608701611942565b949793965091946080013592915050565b600080600080600080600060e0888a031215611b6557600080fd5b873567ffffffffffffffff80821115611b7d57600080fd5b818a0191508a601f830112611b9157600080fd5b8135602082821115611ba557611ba5611a16565b6040519250611bbd601f8301601f1916820184611a2c565b8183528c81838601011115611bd157600080fd5b81818501828501376000818385010152829a50611bef818d01611942565b995050505050604088013594506060880135935060808801359250611c1660a08901611942565b9150611c2460c08901611942565b905092959891949750929550565b600060208284031215611c4457600080fd5b5035919050565b600060208284031215611c5d57600080fd5b813567ffffffffffffffff811115611c7457600080fd5b611c8084828501611a59565b949350505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611cb157611cb1611c88565b92915050565b600060208284031215611cc957600080fd5b5051919050565b80820180821115611cb157611cb1611c88565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602086818501526080604085015281865180845260a086019150828801935060005b81811015611d495784516001600160a01b031683529383019391830191600101611d24565b50508093505050506001600160a01b038316606083015295945050505050565b60005b83811015611d84578181015183820152602001611d6c565b50506000910152565b60008151808452611da5816020860160208601611d69565b601f01601f19169290920160200192915050565b602081526000825160806020840152611dd560a0840182611d8d565b90506001600160a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b600060208284031215611e1a57600080fd5b815180151581146117ba57600080fd5b600060033d1115611e435760046000803e5060005160e01c5b90565b600060443d1015611e545790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611e8457505050505090565b8285019150815181811115611e9c5750505050505090565b843d8701016020828501011115611eb65750505050505090565b611ec560208286010187611a2c565b509095945050505050565b6020815260006117ba6020830184611d8d565b60008251611ef5818460208701611d69565b919091019291505056fea2646970667358221220d11b63fb57dfce62b279f76983b033cb0663dc248cc6f9e8bba699c8eda0cde064736f6c63430008110033000000000000000000000000414068773ac55e6dc7e3781560ffd852e3fd188700000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2