60806040526009805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03199182168117909255600a805473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489083168117909155600b805473dac17f958d2ee523a2206206994597c13d831ec79084168117909155600c805473455e53cbb86018ac2b8092fdcd39d8444affc3f69085168117909155600d8054732260fac5e5542a773aa44fbcfedf7c193bc2c5999086168117909155600e80548616909617909555600f80548516909317909255601080548416909117905560118054831690911790556012805490911690911790556013805461010160a81b6001600160a01b03909116179055601480546001600160c81b0319167879c08ce94676106f3a11c561d893f9fb26dd007c010000000017905560036017556019805460ff191660011790553480156200014d575f80fd5b506040518060400160405280601481526020017f4571756976616c656e636520546f6b656e2056320000000000000000000000008152506040518060400160405280600381526020016211545560ea1b8152508160039081620001b19190620003b7565b506004620001c08282620003b7565b505050620001dd620001d7620001fa60201b60201c565b620001fe565b620001f4336a464f733baa0ae6750000006200024f565b620004a5565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620002aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f828254620002bd91906200047f565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200034157607f821691505b6020821081036200036057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000313575f81815260208120601f850160051c810160208610156200038e5750805b601f850160051c820191505b81811015620003af578281556001016200039a565b505050505050565b81516001600160401b03811115620003d357620003d362000318565b620003eb81620003e484546200032c565b8462000366565b602080601f83116001811462000421575f8415620004095750858301515b5f19600386901b1c1916600185901b178555620003af565b5f85815260208120601f198616915b82811015620004515788860151825594840194600190910190840162000430565b50858210156200046f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049f57634e487b7160e01b5f52601160045260245ffd5b92915050565b614fc880620004b35f395ff3fe6080604052600436106104eb575f3560e01c80637cdcd39f11610285578063a7ab3bdb11610156578063e43252d7116100d1578063f2fde38b11610087578063f4f3b2001161006d578063f4f3b20014610e9f578063f773658314610ebe578063fd1767bc14610ed7575f80fd5b8063f2fde38b14610e61578063f3ab94ab14610e80575f80fd5b8063e554eae1116100b7578063e554eae114610e1a578063f1d15c0314610e2e578063f201a2bc14610e4c575f80fd5b8063e43252d714610ddc578063e455885914610dfb575f80fd5b8063b861ff7c11610126578063da058ae31161010c578063da058ae314610d46578063dc90955a14610d65578063dd62ed3e14610d98575f80fd5b8063b861ff7c14610cf0578063d64b3c3d14610d27575f80fd5b8063a7ab3bdb14610c90578063a9059cbb14610ca9578063ac0f539d14610cc8578063aca682b514610cdc575f80fd5b806391ca330c116102005780639ea7c4ea116101b65780639fe9c2d01161019c5780639fe9c2d014610c0a578063a457c2d714610c40578063a70d4f5414610c5f575f80fd5b80639ea7c4ea14610bbc5780639f92d0dd14610bf6575f80fd5b806395d89b41116101e657806395d89b4114610b5b57806399f9889814610b6f5780639b19251a14610b8e575f80fd5b806391ca330c14610b1f57806395bdbd2414610b47575f80fd5b80638ab1d681116102555780638c5d128a1161023b5780638c5d128a14610ac35780638da5cb5b14610ae357806391a7fe2314610b00575f80fd5b80638ab1d68114610a855780638ba7280014610aa4575f80fd5b80637cdcd39f146109ec5780637e926b4b14610a0b578063847af92c14610a2a57806388467ce114610a49575f80fd5b806342966c68116103bf57806357e2e6d11161033a5780636d500c95116102f057806370a08231116102d657806370a0823114610984578063788c5999146109b857806379cc6790146109cd575f80fd5b80636d500c951461095c5780636d85f8b814610970575f80fd5b80636b29b79f116103205780636b29b79f146108f45780636c4dbde1146109135780636cfce55e14610948575f80fd5b806357e2e6d1146108b65780635d82378a146108d5575f80fd5b80634d7ae7a81161038f578063554cb0f011610375578063554cb0f014610864578063554d4385146108835780635602e3a2146108a2575f80fd5b80634d7ae7a814610826578063503049bb14610845575f80fd5b806342966c681461079557806343cce045146107b457806349489138146107e65780634c69c00f14610807575f80fd5b806318160ddd1161046957806323b872dd1161041f5780633950935111610405578063395093511461072a5780633ccfd60b146107495780633e8ce9a61461075d575f80fd5b806323b872dd146106f0578063313ce5671461070f575f80fd5b806321fb4b261161044f57806321fb4b26146106925780632218413f146106a657806322b2804d146106d1575f80fd5b806318160ddd146106605780631ff989d21461067e575f80fd5b806310ad2fa2116104be57806313e86f0a116104a457806313e86f0a146105d25780631525ff7d1461060657806317781ae614610625575f80fd5b806310ad2fa2146105935780631249c58b146105ca575f80fd5b806304a96d17146104ef57806304f9f8831461050557806306fdde0314610553578063095ea7b314610574575b5f80fd5b3480156104fa575f80fd5b50610503610ef6565b005b348015610510575f80fd5b5060135461053e907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561055e575f80fd5b50610567611054565b60405161054a91906149b5565b34801561057f575f80fd5b5061053e61058e366004614a19565b6110e4565b34801561059e575f80fd5b50600e546105b2906001600160a01b031681565b6040516001600160a01b03909116815260200161054a565b6105036110fd565b3480156105dd575f80fd5b5060135461053e9077010000000000000000000000000000000000000000000000900460ff1681565b348015610611575f80fd5b50610503610620366004614a43565b6114b4565b348015610630575f80fd5b5060135461053e907e01000000000000000000000000000000000000000000000000000000000000900460ff1681565b34801561066b575f80fd5b506002545b60405190815260200161054a565b348015610689575f80fd5b506105676114f6565b34801561069d575f80fd5b506105676115a0565b3480156106b1575f80fd5b506106ba611600565b6040805192835260ff90911660208301520161054a565b3480156106dc575f80fd5b506105036106eb366004614a72565b6116f2565b3480156106fb575f80fd5b5061053e61070a366004614adf565b61184e565b34801561071a575f80fd5b506040516012815260200161054a565b348015610735575f80fd5b5061053e610744366004614a19565b611881565b348015610754575f80fd5b506105036118bf565b348015610768575f80fd5b5060135461053e907b01000000000000000000000000000000000000000000000000000000900460ff1681565b3480156107a0575f80fd5b506105036107af366004614b1d565b61192d565b3480156107bf575f80fd5b5060135461053e907501000000000000000000000000000000000000000000900460ff1681565b3480156107f1575f80fd5b5060145461053e90640100000000900460ff1681565b348015610812575f80fd5b50610503610821366004614a43565b611943565b348015610831575f80fd5b506013546105b2906001600160a01b031681565b348015610850575f80fd5b5060145461053e9062010000900460ff1681565b34801561086f575f80fd5b506016546105b2906001600160a01b031681565b34801561088e575f80fd5b50600f546105b2906001600160a01b031681565b3480156108ad575f80fd5b50610503611985565b3480156108c1575f80fd5b506105036108d0366004614a72565b611a21565b3480156108e0575f80fd5b506011546105b2906001600160a01b031681565b3480156108ff575f80fd5b5061050361090e366004614a43565b611b66565b34801561091e575f80fd5b5060135461053e907801000000000000000000000000000000000000000000000000900460ff1681565b348015610953575f80fd5b506106ba611ba8565b348015610967575f80fd5b506106ba611c6e565b34801561097b575f80fd5b50610567611d34565b34801561098f575f80fd5b5061067061099e366004614a43565b6001600160a01b03165f9081526020819052604090205490565b3480156109c3575f80fd5b5061067060175481565b3480156109d8575f80fd5b506105036109e7366004614a19565b611d94565b3480156109f7575f80fd5b506010546105b2906001600160a01b031681565b348015610a16575f80fd5b50610503610a25366004614b34565b611df3565b348015610a35575f80fd5b50610503610a44366004614b1d565b611e56565b348015610a54575f80fd5b5060135461053e907f0100000000000000000000000000000000000000000000000000000000000000900460ff1681565b348015610a90575f80fd5b50610503610a9f366004614a43565b611e63565b348015610aaf575f80fd5b50610503610abe366004614b34565b611ea9565b348015610ace575f80fd5b5060145461053e906301000000900460ff1681565b348015610aee575f80fd5b506005546001600160a01b03166105b2565b348015610b0b575f80fd5b50610503610b1a366004614a72565b611efb565b348015610b2a575f80fd5b506014546105b2906501000000000090046001600160a01b031681565b348015610b52575f80fd5b5061056761205e565b348015610b66575f80fd5b506105676120be565b348015610b7a575f80fd5b50610503610b89366004614a19565b6120cd565b348015610b99575f80fd5b5061053e610ba8366004614a43565b60066020525f908152604090205460ff1681565b348015610bc7575f80fd5b5060135461053e907d010000000000000000000000000000000000000000000000000000000000900460ff1681565b348015610c01575f80fd5b5061050361221c565b348015610c15575f80fd5b5060135461053e90790100000000000000000000000000000000000000000000000000900460ff1681565b348015610c4b575f80fd5b5061053e610c5a366004614a19565b612286565b348015610c6a575f80fd5b5060135461053e9074010000000000000000000000000000000000000000900460ff1681565b348015610c9b575f80fd5b5060195461053e9060ff1681565b348015610cb4575f80fd5b5061053e610cc3366004614a19565b61233a565b348015610cd3575f80fd5b506106ba612361565b348015610ce7575f80fd5b50610567612427565b348015610cfb575f80fd5b5060135461053e907a010000000000000000000000000000000000000000000000000000900460ff1681565b348015610d32575f80fd5b506012546105b2906001600160a01b031681565b348015610d51575f80fd5b50610503610d60366004614a43565b612487565b348015610d70575f80fd5b5060135461053e90760100000000000000000000000000000000000000000000900460ff1681565b348015610da3575f80fd5b50610670610db2366004614b4f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610de7575f80fd5b50610503610df6366004614a43565b6124d3565b348015610e06575f80fd5b50610503610e15366004614a72565b612531565b348015610e25575f80fd5b506106ba612691565b348015610e39575f80fd5b5060145461053e90610100900460ff1681565b348015610e57575f80fd5b5061067060185481565b348015610e6c575f80fd5b50610503610e7b366004614a43565b612757565b348015610e8b575f80fd5b50610503610e9a366004614b34565b6127e4565b348015610eaa575f80fd5b50610503610eb9366004614a43565b61281d565b348015610ec9575f80fd5b5060145461053e9060ff1681565b348015610ee2575f80fd5b50610503610ef1366004614b86565b6129b9565b335f908152600860205260408120549003610f3d576040517f47d54c0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6a52b7d2dcc80cd2e4000000610f5260025490565b108015610f6e5750335f90815260076020526040902054600111155b1561103657335f908152600860205260409020544211610fba576040517f25e5baa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110363366ec4165cd9040006002670de0b6b3a7640000610fda60025490565b81610fe757610fe7614ba6565b335f90815260086020908152604080832054600790925290912054929091049290920a662386f26fc1000003916301e187e0914291909103025b04028161103057611030614ba6565b0461419e565b335f9081526008602090815260408083208390556007909152812055565b60606003805461106390614bd3565b80601f016020809104026020016040519081016040528092919081815260200182805461108f90614bd3565b80156110da5780601f106110b1576101008083540402835291602001916110da565b820191905f5260205f20905b8154815290600101906020018083116110bd57829003601f168201915b5050505050905090565b5f336110f181858561425b565b60019150505b92915050565b600260175410611139576040517ff263654200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080517f313ce56700000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015611199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bd9190614c24565b60ff1690505f805f602484106112725760165f9054906101000a90046001600160a01b03166001600160a01b031663b35bf5c26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112419190614c44565b61124c602486614c88565b61125790600a614db9565b6112619034614dc4565b61126b9190614dc4565b9050611314565b60165f9054906101000a90046001600160a01b03166001600160a01b031663b35bf5c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e69190614c44565b346112f2866024614c88565b6112fd90600a614db9565b6113079190614dfc565b6113119190614dc4565b90505b6002546113219082614e13565b6a52b7d2dcc80cd2e40000001015611365576040517f0e4dda5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135474010000000000000000000000000000000000000000900460ff16156113dc576013546040516042349081049550600286026032820491829003039450916001600160a01b0316906108fc8315029083905f818181858888f193505050501580156113d5573d5f803e3d5ffd5b50506113eb565b60283404925082600202340391505b6005546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611422573d5f803e3d5ffd5b506015546040516001600160a01b039091169084156108fc029085905f818181858888f1935050505015801561145a573d5f803e3d5ffd5b50601454604051650100000000009091046001600160a01b0316906108fc8415029084905f818181858888f1935050505015801561149a573d5f803e3d5ffd5b506114a5338261419e565b6114ae336143b3565b50505050565b6114bc6144dd565b601580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b601154604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015611556573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261159b9190810190614e53565b905090565b601254604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015611556573d5f803e3d5ffd5b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663b35bf5c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611652573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116769190614c44565b600e5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614c24565b915091509091565b6116fa6144dd565b600a80546001600160a01b039096167fffffffffffffffffffffffff00000000000000000000000000000000000000009687168117909155600f805490961617909455601380549115157d010000000000000000000000000000000000000000000000000000000000027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff931515790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff951515750100000000000000000000000000000000000000000002959095167fffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffff90931692909217939093179190911617905560148054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b5f61185a843384614537565b6118658484846145e0565b61186e846143b3565b611877836143b3565b5060019392505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091906110f190829086906118ba908790614e13565b61425b565b6118c76144dd565b600147106118fa5760405133904780156108fc02915f818181858888f193505050501580156118f8573d5f803e3d5ffd5b505b305f9081526020819052604090205460011161192b57305f8181526020819052604090205461192b919033906145e0565b565b61193733826147cb565b611940336143b3565b50565b61194b6144dd565b601680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6a52b7d2dcc80cd2e400000061199a60025490565b106119d1576040517f833f60fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600860205260408120549003611a18576040517f47d54c0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192b336143b3565b611a296144dd565b600d80546001600160a01b039096167fffffffffffffffffffffffff000000000000000000000000000000000000000096871681179091556012805490961617909455601380549215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff941515780100000000000000000000000000000000000000000000000002949094167fffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffff9093169290921792909217905560148054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff0090931692909217179055565b611b6e6144dd565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663a7fcb0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1e9190614c44565b600f5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b5f8060165f9054906101000a90046001600160a01b03166001600160a01b0316638698ead26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce49190614c44565b60125f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b600f54604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015611556573d5f803e3d5ffd5b60195460ff1615611dd1576040517f377840bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ddc823383614537565b611de682826147cb565b611def826143b3565b5050565b611dfb6144dd565b80611e4d5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420636f6e6669726d65640000000000000000000000000000000000000060448201526064015b60405180910390fd5b6119405f61492a565b611e5e6144dd565b601755565b611e6b6144dd565b6001600160a01b03165f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eb16144dd565b6013805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b611f036144dd565b600c80546001600160a01b039096167fffffffffffffffffffffffff000000000000000000000000000000000000000096871681179091556011805490961617909455601380549115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9315157b01000000000000000000000000000000000000000000000000000000027fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff9515157701000000000000000000000000000000000000000000000002959095167fffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff909316929092179390931791909116179055601480549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b600e54604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015611556573d5f803e3d5ffd5b60606004805461106390614bd3565b60195460ff161561210a576040517f377840bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526006602052604090205460ff16612152576040517f803ced0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6b033b2e3c9fd0803ce80000008110158061218357506b033b2e3c9fd0803ce80000008161217f60025490565b0110155b156121ba576040517f6239a71800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6a52b7d2dcc80cd2e40000006121cf60025490565b1115612212576002546009026b1ffd168b615cf58e2c000000036a52b7d2dcc80cd2e40000006121fe60025490565b0382028161220e5761220e614ba6565b0490035b611de6828261419e565b335f9081526008602052604090205415612262576040517fbd43cffe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526020818152604080832054600783528184205560089091529020429055565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190838110156123225760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401611e44565b61232f828686840361425b565b506001949350505050565b5f6123463384846145e0565b61234f336143b3565b612358836143b3565b50600192915050565b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663095913196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d79190614c44565b60105f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b601054604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015611556573d5f803e3d5ffd5b61248f6144dd565b600980546001600160a01b039092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155600e8054909216179055565b6124db6144dd565b6001600160a01b0381165f90815260066020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601880549161252983614f19565b919050555050565b6125396144dd565b600b80546001600160a01b039096167fffffffffffffffffffffffff000000000000000000000000000000000000000096871681179091556010805490961617909455601380549115157e01000000000000000000000000000000000000000000000000000000000000027fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9315157a010000000000000000000000000000000000000000000000000000027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff95151576010000000000000000000000000000000000000000000002959095167fffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff9093169290921793909317919091161790556014805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663e129ee736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127079190614c44565b60115f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b61275f6144dd565b6001600160a01b0381166127db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611e44565b6119408161492a565b6127ec6144dd565b601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6128256144dd565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001906001600160a01b038316906370a0823190602401602060405180830381865afa158015612883573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a79190614c44565b10611940576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015612911573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129359190614c44565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015612995573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611def9190614f50565b601754600114806129cd5750600360175410155b15612a04576040517ff263654200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254612a119083614e13565b6a52b7d2dcc80cd2e40000001015612a55576040517f0e4dda5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580612a63575060058110155b15612a9a576040517f464d813400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f8360010361307b57600f54604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015612b06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a9190614c24565b60ff1610612c5b57600f54604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015612b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb79190614c24565b612bc19190614f6b565b612bcc90600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663a7fcb0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c409190614c44565b612c4a9087614dfc565b612c549190614dfc565b9150612d70565b600f5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ccf9190614c24565b612cda906024614f6b565b612ce590600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663a7fcb0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d599190614c44565b612d639087614dfc565b612d6d9190614dc4565b91505b60428211612daa576040517fe7b9b14c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135474010000000000000000000000000000000000000000900460ff1615612e7f5750600a546013546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152603284046044820181905260026042860490810282870303965093909216906323b872dd906064016020604051808303815f875af1158015612e54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e789190614f50565b5050612e8e565b60288204905080600202820392505b600a546001600160a01b03166323b872dd33612eb26005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064016020604051808303815f875af1158015612f1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f3f9190614f50565b50600a546015546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303815f875af1158015612fb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd59190614f50565b50600a546014546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b036501000000000090920482166024820152604481018690529116906323b872dd906064015b6020604051808303815f875af1158015613051573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130759190614f50565b50614184565b8360020361361757601054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156130e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131089190614c24565b60ff161061323957601054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015613171573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131959190614c24565b61319f9190614f6b565b6131aa90600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663095913196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061321e9190614c44565b6132289087614dfc565b6132329190614dfc565b915061334e565b60105f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ad9190614c24565b6132b8906024614f6b565b6132c390600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663095913196040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133379190614c44565b6133419087614dfc565b61334b9190614dc4565b91505b60428211613388576040517fe7b9b14c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135474010000000000000000000000000000000000000000900460ff161561345d5750600b546013546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152603284046044820181905260026042860490810282870303965093909216906323b872dd906064016020604051808303815f875af1158015613432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134569190614f50565b505061346c565b60288204905080600202820392505b600b546001600160a01b03166323b872dd336134906005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064016020604051808303815f875af11580156134f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061351d9190614f50565b50600b546015546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303815f875af115801561358f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b39190614f50565b50600b546014546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b036501000000000090920482166024820152604481018690529116906323b872dd90606401613035565b83600303613bb357601154604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015613680573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a49190614c24565b60ff16106137d557601154604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa15801561370d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137319190614c24565b61373b9190614f6b565b61374690600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663e129ee736040518163ffffffff1660e01b8152600401602060405180830381865afa158015613796573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ba9190614c44565b6137c49087614dfc565b6137ce9190614dfc565b91506138ea565b60115f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613825573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138499190614c24565b613854906024614f6b565b61385f90600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b031663e129ee736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d39190614c44565b6138dd9087614dfc565b6138e79190614dc4565b91505b60428211613924576040517fe7b9b14c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135474010000000000000000000000000000000000000000900460ff16156139f95750600c546013546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152603284046044820181905260026042860490810282870303965093909216906323b872dd906064016020604051808303815f875af11580156139ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139f29190614f50565b5050613a08565b60288204905080600202820392505b600c546001600160a01b03166323b872dd33613a2c6005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064016020604051808303815f875af1158015613a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ab99190614f50565b50600c546015546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303815f875af1158015613b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b4f9190614f50565b50600c546014546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b036501000000000090920482166024820152604481018690529116906323b872dd90606401613035565b601254604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015613c14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c389190614c24565b60ff1610613d6957601254604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516024926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015613ca1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cc59190614c24565b613ccf9190614f6b565b613cda90600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b0316638698ead26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d4e9190614c44565b613d589087614dfc565b613d629190614dfc565b9150613e7e565b60125f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613db9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ddd9190614c24565b613de8906024614f6b565b613df390600a614f84565b60165f9054906101000a90046001600160a01b03166001600160a01b0316638698ead26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e679190614c44565b613e719087614dfc565b613e7b9190614dc4565b91505b60428211613eb8576040517fe7b9b14c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135474010000000000000000000000000000000000000000900460ff1615613f8d5750600d546013546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152603284046044820181905260026042860490810282870303965093909216906323b872dd906064016020604051808303815f875af1158015613f62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f869190614f50565b5050613f9c565b60288204905080600202820392505b600d546001600160a01b03166323b872dd33613fc06005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064016020604051808303815f875af1158015614029573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061404d9190614f50565b50600d546015546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303815f875af11580156140bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140e39190614f50565b50600d546014546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b036501000000000090920482166024820152604481018690529116906323b872dd906064016020604051808303815f875af115801561415e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141829190614f50565b505b61418e338661419e565b614197336143b3565b5050505050565b6001600160a01b0382166141f45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611e44565b8060025f8282546142059190614e13565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166142d65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b0382166143525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381165f90815260086020526040902054600111611940576a52b7d2dcc80cd2e40000006143e760025490565b10156144b1576001600160a01b0381165f90815260086020526040902054421161443d576040517f25e5baa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144b18166ec4165cd9040006002670de0b6b3a764000061445d60025490565b8161446a5761446a614ba6565b6001600160a01b0387165f90815260086020908152604080832054600790925290912054929091049290920a662386f26fc1000003916301e187e091429190910302611021565b6001600160a01b03165f9081526020818152604080832054600783528184205560089091529020429055565b6005546001600160a01b0316331461192b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611e44565b6001600160a01b038381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114ae57818110156145d35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611e44565b6114ae848484840361425b565b6001600160a01b03831661465c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b0382166146d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b0383165f90815260208190526040902054818110156147665760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36114ae565b6001600160a01b0382166148475760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b0382165f90815260208190526040902054818110156148d55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401611e44565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016143a6565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5b838110156149ad578181015183820152602001614995565b50505f910152565b602081525f82518060208401526149d3816040850160208701614993565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114611940575f80fd5b5f8060408385031215614a2a575f80fd5b8235614a3581614a05565b946020939093013593505050565b5f60208284031215614a53575f80fd5b8135614a5e81614a05565b9392505050565b8015158114611940575f80fd5b5f805f805f60a08688031215614a86575f80fd5b8535614a9181614a05565b94506020860135614aa181614a65565b93506040860135614ab181614a65565b92506060860135614ac181614a65565b91506080860135614ad181614a65565b809150509295509295909350565b5f805f60608486031215614af1575f80fd5b8335614afc81614a05565b92506020840135614b0c81614a05565b929592945050506040919091013590565b5f60208284031215614b2d575f80fd5b5035919050565b5f60208284031215614b44575f80fd5b8135614a5e81614a65565b5f8060408385031215614b60575f80fd5b8235614b6b81614a05565b91506020830135614b7b81614a05565b809150509250929050565b5f8060408385031215614b97575f80fd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181811c90821680614be757607f821691505b602082108103614c1e577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614c34575f80fd5b815160ff81168114614a5e575f80fd5b5f60208284031215614c54575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156110f7576110f7614c5b565b600181815b80851115614cf457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614cda57614cda614c5b565b80851615614ce757918102915b93841c9390800290614ca0565b509250929050565b5f82614d0a575060016110f7565b81614d1657505f6110f7565b8160018114614d2c5760028114614d3657614d52565b60019150506110f7565b60ff841115614d4757614d47614c5b565b50506001821b6110f7565b5060208310610133831016604e8410600b8410161715614d75575081810a6110f7565b614d7f8383614c9b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614db157614db1614c5b565b029392505050565b5f614a5e8383614cfc565b5f82614df7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176110f7576110f7614c5b565b808201808211156110f7576110f7614c5b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614e63575f80fd5b815167ffffffffffffffff80821115614e7a575f80fd5b818401915084601f830112614e8d575f80fd5b815181811115614e9f57614e9f614e26565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715614ee557614ee5614e26565b81604052828152876020848701011115614efd575f80fd5b614f0e836020830160208801614993565b979650505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f4957614f49614c5b565b5060010190565b5f60208284031215614f60575f80fd5b8151614a5e81614a65565b60ff82811682821603908111156110f7576110f7614c5b565b5f614a5e60ff841683614cfc56fea2646970667358221220235907dc170742b061992e55a39932f18c39bf87b3cf05e334d9c2e14d1c942364736f6c63430008150033