60806040523480156200001157600080fd5b5060405162002a3c38038062002a3c833981016040819052620000349162000103565b6040518060400160405280600d81526020016c4554484475626169203230323360981b81525060405180604001604052806005815260200164454442323360d81b81525081600090816200008991906200026e565b5060016200009882826200026e565b50505060405180606001604052806030815260200162002a0c60309139600f90620000c490826200026e565b506010620000d382826200026e565b5050601280546001600160a01b031916331790556200033a565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200011757600080fd5b82516001600160401b03808211156200012f57600080fd5b818501915085601f8301126200014457600080fd5b815181811115620001595762000159620000ed565b604051601f8201601f19908116603f01168101908382118183101715620001845762000184620000ed565b8160405282815288868487010111156200019d57600080fd5b600093505b82841015620001c15784840186015181850187015292850192620001a2565b82841115620001d35760008684830101525b98975050505050505050565b600181811c90821680620001f457607f821691505b6020821081036200021557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026957600081815260208120601f850160051c81016020861015620002445750805b601f850160051c820191505b81811015620002655782815560010162000250565b5050505b505050565b81516001600160401b038111156200028a576200028a620000ed565b620002a2816200029b8454620001df565b846200021b565b602080601f831160018114620002da5760008415620002c15750858301515b600019600386901b1c1916600185901b17855562000265565b600085815260208120601f198616915b828110156200030b57888601518255948401946001909101908401620002ea565b50858210156200032a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6126c2806200034a6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80636c0360eb1161012a578063b88d4fde116100bd578063d1dc25671161008c578063e452351b11610071578063e452351b1461046f578063e985e9c514610482578063eaf21a0c146104be57600080fd5b8063d1dc256714610449578063e050be571461045c57600080fd5b8063b88d4fde146103fd578063bdba7ca014610410578063c87b56dd14610423578063c91e10131461043657600080fd5b806395d89b41116100f957806395d89b41146103bc5780639ada3797146103c45780639d68ce53146103d7578063a22cb465146103ea57600080fd5b80636c0360eb1461037b57806370a08231146103835780638da5cb5b146103965780638f34ac6e146103a957600080fd5b80631c93b03a116101a257806342842e0e1161017157806342842e0e1461032f5780634f6ccce71461034257806355f804b3146103555780636352211e1461036857600080fd5b80631c93b03a146102ee57806323b872dd146102f65780632f745c5914610309578063346debfc1461031c57600080fd5b8063095ea7b3116101de578063095ea7b3146102a157806313af4035146102b657806318160ddd146102c957806318fd5ddf146102db57600080fd5b806301ffc9a714610210578063025e7c271461023857806306fdde0314610279578063081812fc1461028e575b600080fd5b61022361021e366004611ea0565b6104d1565b60405190151581526020015b60405180910390f35b610261610246366004611ec4565b600e602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b61028161052d565b60405161022f9190611f35565b61026161029c366004611ec4565b6105bf565b6102b46102af366004611f64565b61066a565b005b6102b46102c4366004611f8e565b61079b565b6008545b60405190815260200161022f565b601354610261906001600160a01b031681565b610281610827565b6102b4610304366004611fa9565b6108b5565b6102cd610317366004611f64565b61093c565b601154610261906001600160a01b031681565b6102b461033d366004611fa9565b6109e4565b6102cd610350366004611ec4565b6109ff565b6102b4610363366004612091565b610aa3565b610261610376366004611ec4565b610b10565b610281610b9b565b6102cd610391366004611f8e565b610ba8565b601254610261906001600160a01b031681565b6102b46103b7366004611f8e565b610c42565b610281610cce565b6102cd6103d23660046120c6565b610cdd565b6102b46103e5366004612091565b610e37565b6102b46103f836600461213a565b610ea0565b6102b461040b366004612176565b610eab565b6102b461041e3660046121f2565b610f39565b610281610431366004611ec4565b610fdc565b610281610444366004611ec4565b6110b6565b6102b4610457366004611f8e565b6110cf565b61028161046a366004611ec4565b61115b565b6102b461047d366004611ec4565b611174565b61022361049036600461225f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102816104cc366004611ec4565b61123b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610527575061052782611254565b92915050565b60606000805461053c90612292565b80601f016020809104026020016040519081016040528092919081815260200182805461056890612292565b80156105b55780601f1061058a576101008083540402835291602001916105b5565b820191906000526020600020905b81548152906001019060200180831161059857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661064e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061067582610b10565b9050806001600160a01b0316836001600160a01b0316036106fe5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610645565b336001600160a01b038216148061071a575061071a8133610490565b61078c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610645565b6107968383611337565b505050565b6011546001600160a01b03163314806107be57506012546001600160a01b031633145b6107f85760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6010805461083490612292565b80601f016020809104026020016040519081016040528092919081815260200182805461086090612292565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b505050505081565b6108bf33826113b2565b6109315760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610645565b6107968383836114ba565b600061094783610ba8565b82106109bb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610645565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61079683838360405180602001604052806000815250610eab565b6000610a0a60085490565b8210610a7e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610645565b60088281548110610a9157610a916122cc565b90600052602060002001549050919050565b6011546001600160a01b0316331480610ac657506012546001600160a01b031633145b610b005760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b600f610b0c8282612330565b5050565b6000818152600260205260408120546001600160a01b0316806105275760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610645565b600f805461083490612292565b60006001600160a01b038216610c265760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610645565b506001600160a01b031660009081526003602052604090205490565b6011546001600160a01b0316331480610c6557506012546001600160a01b031633145b610c9f5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606001805461053c90612292565b6011546000906001600160a01b0316331480610d0357506012546001600160a01b031633145b80610d1857506013546001600160a01b031633145b610d525760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b610d60600a80546001019055565b6000610d6b600a5490565b9050610d77858261169f565b6000818152600b60205260409020610d8f8482612330565b506000818152600e60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a16179055600d9091529020610dd88582612330565b506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250600c60008381526020019081526020016000209081610e2e9190612330565b50949350505050565b6011546001600160a01b0316331480610e5a57506012546001600160a01b031633145b610e945760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6010610b0c8282612330565b610b0c3383836117fa565b610eb533836113b2565b610f275760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610645565b610f33848484846118c8565b50505050565b6011546001600160a01b0316331480610f5c57506012546001600160a01b031633145b80610f7157506013546001600160a01b031633145b610fab5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6000818152600d60205260409020610fc38482612330565b506000818152600b60205260409020610f338382612330565b6060610fe7600a5490565b82111561105c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610645565b6000600f601061106b85611951565b6000868152600b60209081526040808320600d8352818420600c845293829020915161109f97969594919391929101612463565b60408051601f198184030181529190529392505050565b600b602052600090815260409020805461083490612292565b6011546001600160a01b03163314806110f257506012546001600160a01b031633145b61112c5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c602052600090815260409020805461083490612292565b6011546001600160a01b031633148061119757506012546001600160a01b031633145b806111ac57506013546001600160a01b031633145b6111e65760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610645565b6040518060400160405280600481526020017f7472756500000000000000000000000000000000000000000000000000000000815250600c60008381526020019081526020016000209081610b0c9190612330565b600d602052600090815260409020805461083490612292565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806112e757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061052757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610527565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061137982610b10565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661143c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610645565b600061144783610b10565b9050806001600160a01b0316846001600160a01b031614806114825750836001600160a01b0316611477846105bf565b6001600160a01b0316145b806114b257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166114cd82610b10565b6001600160a01b0316146115495760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610645565b6001600160a01b0382166115c45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610645565b6115cf838383611a86565b6115da600082611337565b6001600160a01b0383166000908152600360205260408120805460019290611603908490612596565b90915550506001600160a01b03821660009081526003602052604081208054600192906116319084906125ad565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166116f55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610645565b6000818152600260205260409020546001600160a01b03161561175a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610645565b61176660008383611a86565b6001600160a01b038216600090815260036020526040812080546001929061178f9084906125ad565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b03160361185b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610645565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118d38484846114ba565b6118df84848484611b3e565b610f335760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610645565b60608160000361199457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156119be57806119a8816125c5565b91506119b79050600a836125f5565b9150611998565b60008167ffffffffffffffff8111156119d9576119d9611fe5565b6040519080825280601f01601f191660200182016040528015611a03576020820181803683370190505b5090505b84156114b257611a18600183612596565b9150611a25600a86612609565b611a309060306125ad565b60f81b818381518110611a4557611a456122cc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a7f600a866125f5565b9450611a07565b6001600160a01b038316611ae157611adc81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b04565b816001600160a01b0316836001600160a01b031614611b0457611b048382611cdf565b6001600160a01b038216611b1b5761079681611d7c565b826001600160a01b0316826001600160a01b031614610796576107968282611e2b565b60006001600160a01b0384163b15611cd4576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611b9b90339089908890889060040161261d565b6020604051808303816000875af1925050508015611bd6575060408051601f3d908101601f19168201909252611bd391810190612659565b60015b611c89573d808015611c04576040519150601f19603f3d011682016040523d82523d6000602084013e611c09565b606091505b508051600003611c815760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610645565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506114b2565b506001949350505050565b60006001611cec84610ba8565b611cf69190612596565b600083815260076020526040902054909150808214611d49576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d8e90600190612596565b60008381526009602052604081205460088054939450909284908110611db657611db66122cc565b906000526020600020015490508060088381548110611dd757611dd76122cc565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611e0f57611e0f612676565b6001900381819060005260206000200160009055905550505050565b6000611e3683610ba8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e9d57600080fd5b50565b600060208284031215611eb257600080fd5b8135611ebd81611e6f565b9392505050565b600060208284031215611ed657600080fd5b5035919050565b60005b83811015611ef8578181015183820152602001611ee0565b83811115610f335750506000910152565b60008151808452611f21816020860160208601611edd565b601f01601f19169290920160200192915050565b602081526000611ebd6020830184611f09565b80356001600160a01b0381168114611f5f57600080fd5b919050565b60008060408385031215611f7757600080fd5b611f8083611f48565b946020939093013593505050565b600060208284031215611fa057600080fd5b611ebd82611f48565b600080600060608486031215611fbe57600080fd5b611fc784611f48565b9250611fd560208501611f48565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561201657612016611fe5565b604051601f8501601f19908116603f0116810190828211818310171561203e5761203e611fe5565b8160405280935085815286868601111561205757600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261208257600080fd5b611ebd83833560208501611ffb565b6000602082840312156120a357600080fd5b813567ffffffffffffffff8111156120ba57600080fd5b6114b284828501612071565b6000806000606084860312156120db57600080fd5b6120e484611f48565b9250602084013567ffffffffffffffff8082111561210157600080fd5b61210d87838801612071565b9350604086013591508082111561212357600080fd5b5061213086828701612071565b9150509250925092565b6000806040838503121561214d57600080fd5b61215683611f48565b91506020830135801515811461216b57600080fd5b809150509250929050565b6000806000806080858703121561218c57600080fd5b61219585611f48565b93506121a360208601611f48565b925060408501359150606085013567ffffffffffffffff8111156121c657600080fd5b8501601f810187136121d757600080fd5b6121e687823560208401611ffb565b91505092959194509250565b60008060006060848603121561220757600080fd5b833567ffffffffffffffff8082111561221f57600080fd5b61222b87838801612071565b9450602086013591508082111561224157600080fd5b5061224e86828701612071565b925050604084013590509250925092565b6000806040838503121561227257600080fd5b61227b83611f48565b915061228960208401611f48565b90509250929050565b600181811c908216806122a657607f821691505b6020821081036122c657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f82111561079657600081815260208120601f850160051c810160208610156123095750805b601f850160051c820191505b8181101561232857828155600101612315565b505050505050565b815167ffffffffffffffff81111561234a5761234a611fe5565b61235e816123588454612292565b846122e2565b602080601f831160018114612393576000841561237b5750858301515b600019600386901b1c1916600185901b178555612328565b600085815260208120601f198616915b828110156123c2578886015182559484019460019091019084016123a3565b50858210156123e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081546123fd81612292565b60018281168015612415576001811461242a57612459565b60ff1984168752821515830287019450612459565b8560005260208060002060005b858110156124505781548a820152908401908201612437565b50505082870194505b5050505092915050565b600061246f82896123f0565b7f3f633d0000000000000000000000000000000000000000000000000000000000815261249f60038201896123f0565b90507f2669643d00000000000000000000000000000000000000000000000000000000815286516124d7816004840160208b01611edd565b7f26733d00000000000000000000000000000000000000000000000000000000006004929091019182015261250f60078201876123f0565b90507f26743d0000000000000000000000000000000000000000000000000000000000815261254160038201866123f0565b90507f26636c3d00000000000000000000000000000000000000000000000000000000815261257360048201856123f0565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156125a8576125a8612580565b500390565b600082198211156125c0576125c0612580565b500190565b600060001982036125d8576125d8612580565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612604576126046125df565b500490565b600082612618576126186125df565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261264f6080830184611f09565b9695505050505050565b60006020828403121561266b57600080fd5b8151611ebd81611e6f565b634e487b7160e01b600052603160045260246000fdfea26469706673582212205ee93c3bec7010c18ab463d894b50707e4c3e45f900d5c3548ff9f2f31774e8264736f6c634300080f003368747470733a2f2f7777772e6574686475626169636f6e662e6f72672f6170692f6e6674696d6167656564622e737667000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000076861726468617400000000000000000000000000000000000000000000000000