60806040523480156200001157600080fd5b50604051620022c3380380620022c3833981016040819052620000349162000159565b6040518060400160405280600f81526020016e2234bb34b232b72faa3930b1b5b2b960891b8152506040518060400160405280601081526020016f2234bb34b232b7322faa3930b1b5b2b960811b815250838282601282600390816200009b91906200023a565b506004620000aa83826200023a565b506005805460ff191660ff9290921691909117905550620000cd905032620000ff565b600680546001600160a01b0319166001600160a01b03929092169190911790555050610e106012556013555062000306565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156200016d57600080fd5b82516001600160a01b03811681146200018557600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c057607f821691505b602082108103620001e157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023557600081815260208120601f850160051c81016020861015620002105750805b601f850160051c820191505b8181101562000231578281556001016200021c565b5050505b505050565b81516001600160401b0381111562000256576200025662000195565b6200026e81620002678454620001ab565b84620001e7565b602080601f831160018114620002a657600084156200028d5750858301515b600019600386901b1c1916600185901b17855562000231565b600085815260208120601f198616915b82811015620002d757888601518255948401946001909101908401620002b6565b5085821015620002f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fad80620003166000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806385a6b3ae11610151578063ba72a955116100c3578063e30443bc11610087578063e30443bc14610600578063e7841ec014610613578063e98030c71461061b578063f2fde38b1461062e578063fbcbc0f114610641578063ffb2c4791461065457600080fd5b8063ba72a9551461056c578063bc4c4b371461057f578063be10b61414610592578063c705c5691461059b578063dd62ed3e146105c757600080fd5b8063a3395cb411610115578063a3395cb4146104f7578063a457c2d71461050a578063a8b9d2401461051d578063a9059cbb14610530578063aafd847a14610543578063b1181e55146102cf57600080fd5b806385a6b3ae146104aa5780638da5cb5b146104b357806391b89fba146104c957806395d89b41146104dc57806399248ea7146104e457600080fd5b8063313ce567116101ea578063556cafb0116101ae578063556cafb01461042c5780635ebf4db9146104555780636a474002146104685780636f2789ec1461047057806370a0823114610479578063715018a6146104a257600080fd5b8063313ce5671461037657806331e79db01461038b578063395093511461039e5780634e7b827f146103b15780635183d6fd146103d457600080fd5b80631105e7401161023c5780631105e7401461030c57806318160ddd1461031f578063226cfa3d1461032757806323b872dd1461034757806327ce01471461035a5780633009a6091461036d57600080fd5b806306fdde03146102795780630716c61114610297578063095ea7b3146102ac57806309bbedde146102cf57806310a8c46b146102e1575b600080fd5b610281610682565b60405161028e9190611bff565b60405180910390f35b6102aa6102a5366004611c62565b610714565b005b6102bf6102ba366004611c7f565b610847565b604051901515815260200161028e565b600b545b60405190815260200161028e565b6102f46102ef366004611cab565b61085e565b6040516001600160a01b03909116815260200161028e565b6102aa61031a366004611c7f565b610891565b6002546102d3565b6102d3610335366004611c62565b60116020526000908152604090205481565b6102bf610355366004611cc4565b610950565b6102d3610368366004611c62565b6109b9565b6102d3600f5481565b60055460405160ff909116815260200161028e565b6102aa610399366004611c62565b610a15565b6102bf6103ac366004611c7f565b610ae2565b6102bf6103bf366004611c62565b60106020526000908152604090205460ff1681565b6103e76103e2366004611cab565b610b18565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161028e565b6102d361043a366004611c62565b6001600160a01b03166000908152600c602052604090205490565b6102aa610463366004611cab565b610b85565b6102aa610bba565b6102d360125481565b6102d3610487366004611c62565b6001600160a01b031660009081526020819052604090205490565b6102aa610c50565b6102d3600a5481565b60055461010090046001600160a01b03166102f4565b6102d36104d7366004611c62565b610c8a565b610281610c95565b6006546102f4906001600160a01b031681565b6102d3610505366004611c62565b610ca4565b6102bf610518366004611c7f565b610ce9565b6102d361052b366004611c62565b610d38565b6102bf61053e366004611c7f565b610d64565b6102d3610551366004611c62565b6001600160a01b031660009081526009602052604090205490565b6102aa61057a366004611cab565b610d71565b6102bf61058d366004611d13565b610e35565b6102d360135481565b6102bf6105a9366004611c62565b6001600160a01b031660009081526010602052604090205460ff1690565b6102d36105d5366004611d4c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102aa61060e366004611c7f565b610ef7565b600f546102d3565b6102aa610629366004611cab565b610f8d565b6102aa61063c366004611c62565b611110565b6103e761064f366004611c62565b6111ae565b610667610662366004611cab565b611295565b6040805193845260208401929092529082015260600161028e565b60606003805461069190611d7a565b80601f01602080910402602001604051908101604052809291908181526020018280546106bd90611d7a565b801561070a5780601f106106df5761010080835404028352916020019161070a565b820191906000526020600020905b8154815290600101906020018083116106ed57829003601f168201915b5050505050905090565b6001600160a01b0381166000908152600e602052604090205460ff166107375750565b6001600160a01b0381166000908152600e60209081526040808320805460ff19169055600c8252808320839055600d909152812054600b5490919061077e90600190611dca565b90506000600b600001828154811061079857610798611ddd565b60009182526020808320909101546001600160a01b03908116808452600d90925260408084208790559087168352822091909155600b80549192508291859081106107e5576107e5611ddd565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600b80548061081f5761081f611df3565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b60006108543384846113b2565b5060015b92915050565b6000600b600001828154811061087657610876611ddd565b6000918252602090912001546001600160a01b031692915050565b6001600160a01b0382166000908152600e602052604090205460ff16156108cf576001600160a01b03919091166000908152600c6020526040902055565b6001600160a01b0382166000818152600e60209081526040808320805460ff19166001908117909155600c8352818420869055600b8054600d909452918420839055820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03191690911790555b5050565b600061095d8484846114d6565b6109af84336109aa85604051806060016040528060288152602001611f2b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061152d565b6113b2565b5060019392505050565b6001600160a01b03811660009081526008602090815260408083205491839052822054600754600160801b92610a0b92610a0692610a00916109fb9190611567565b6115f0565b90611600565b61163e565b6108589190611e09565b6005546001600160a01b03610100909104163214610a4e5760405162461bcd60e51b8152600401610a4590611e2b565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff1615610a7457600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610aa2908290611651565b610aab81610714565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108549185906109aa90866116b0565b600080600080600080600080610b2d600b5490565b8910610b52575060009650600019955085945086935083925082915081905080610b7a565b6000610b5d8a61085e565b9050610b68816111ae565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b03610100909104163214610bb55760405162461bcd60e51b8152600401610a4590611e2b565b601355565b60405162461bcd60e51b815260206004820152605b60248201527f4469766964656e645f547261636b65723a20776974686472617744697669646560448201527f6e642064697361626c65642e20557365207468652027636c61696d272066756e60648201527f6374696f6e206f6e20746865206d61696e20636f6e74726163742e0000000000608482015260a401610a45565b565b6005546001600160a01b03610100909104163214610c805760405162461bcd60e51b8152600401610a4590611e2b565b610c4e600061170f565b600061085882610d38565b60606004805461069190611d7a565b6001600160a01b0381166000908152600e602052604081205460ff16610ccd5750600019919050565b506001600160a01b03166000908152600d602052604090205490565b600061085433846109aa85604051806060016040528060258152602001611f53602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061152d565b6001600160a01b03811660009081526009602052604081205461085890610d5e846109b9565b90611769565b60006108543384846114d6565b6005546001600160a01b03610100909104163214610da15760405162461bcd60e51b8152600401610a4590611e2b565b6000610dac60025490565b11610db657600080fd5b8015610e3257610de9610dc860025490565b610dd683600160801b611567565b610de09190611e09565b600754906116b0565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600a54610e2e90826116b0565b600a555b50565b600032610e506005546001600160a01b036101009091041690565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610a4590611e2b565b6000610e81846117ab565b90508015610eed576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610edb9085815260200190565b60405180910390a36001915050610858565b5060009392505050565b6005546001600160a01b03610100909104163214610f275760405162461bcd60e51b8152600401610a4590611e2b565b6001600160a01b03821660009081526010602052604090205460ff1661094c576013548110610f6957610f5a8282611651565b610f648282610891565b610f7d565b610f74826000611651565b610f7d82610714565b610f88826001610e35565b505050565b6005546001600160a01b03610100909104163214610fbd5760405162461bcd60e51b8152600401610a4590611e2b565b610e108110158015610fd25750620151808111155b61105c5760405162461bcd60e51b815260206004820152604f60248201527f5544414f546f6b656e5f4469766964656e645f547261636b65723a20636c616960448201527f6d57616974206d757374206265207570646174656420746f206265747765656e60648201526e203120616e6420323420686f75727360881b608482015260a401610a45565b60125481036110dd5760405162461bcd60e51b815260206004820152604160248201527f5544414f546f6b656e5f4469766964656e645f547261636b65723a2043616e6e60448201527f6f742075706461746520636c61696d5761697420746f2073616d652076616c756064820152606560f81b608482015260a401610a45565b60125460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601255565b6005546001600160a01b036101009091041632146111405760405162461bcd60e51b8152600401610a4590611e2b565b6001600160a01b0381166111a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a45565b610e328161170f565b8060008080808080806111c088610ca4565b965060001995506000871261122257600f548711156111ee57600f546111e7908890611910565b9550611222565b600f54600b5460009110611203576000611212565b600f54600b5461121291611769565b905061121e8882611600565b9650505b61122b88610d38565b9450611236886109b9565b6001600160a01b03891660009081526011602052604090205490945092508261126057600061126e565b60125461126e9084906116b0565b915042821161127e576000611288565b6112888242611769565b9050919395975091939597565b600b54600090819081908082036112b7575050600f54600092508291506113ab565b600f546000805a90506000805b89841080156112d257508582105b1561139a57846112e181611e60565b600b54909650861090506112f457600094505b6000600b600001868154811061130c5761130c611ddd565b60009182526020808320909101546001600160a01b0316808352601190915260409091205490915061133d9061194d565b156113605761134d816001610e35565b15611360578161135c81611e60565b9250505b8261136a81611e60565b93505060005a9050808511156113915761138e6113878683611769565b87906116b0565b95505b93506112c49050565b600f85905590975095509193505050505b9193909250565b6001600160a01b0383166114145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a45565b6001600160a01b0382166114755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a45565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602660248201527f4469766964656e645f547261636b65723a204e6f207472616e736665727320616044820152651b1b1bddd95960d21b6064820152608401610a45565b600081848411156115515760405162461bcd60e51b8152600401610a459190611bff565b50600061155e8486611dca565b95945050505050565b60008260000361157957506000610858565b60006115858385611e79565b9050826115928583611e09565b146115e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a45565b9392505050565b6000818181121561085857600080fd5b60008061160d8385611e90565b9050600083121580156116205750838112155b80611635575060008312801561163557508381125b6115e957600080fd5b60008082121561164d57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561169057600061167e8383611769565b905061168a8482611974565b50505050565b80821015610f885760006116a48284611769565b905061168a84826119d8565b6000806116bd8385611eb8565b9050838110156115e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a45565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006115e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061152d565b6000806117b783610d38565b90508015611907576001600160a01b0383166000908152600960205260409020546117e290826116b0565b6001600160a01b038416600081815260096020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906118319084815260200190565b60405180910390a260065460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af115801561188d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b19190611ecb565b905080611900576001600160a01b0384166000908152600960205260409020546118db9083611769565b6001600160a01b03909416600090815260096020526040812094909455509192915050565b5092915050565b50600092915050565b60008061191d8385611ee8565b9050600083121580156119305750838113155b80611635575060008312801561163557508381136115e957600080fd5b60004282111561195f57506000919050565b60125461196c4284611769565b101592915050565b61197e8282611a1c565b6119b86119996109fb8360075461156790919063ffffffff16565b6001600160a01b03841660009081526008602052604090205490611910565b6001600160a01b0390921660009081526008602052604090209190915550565b6119e28282611afb565b6119b86119fd6109fb8360075461156790919063ffffffff16565b6001600160a01b03841660009081526008602052604090205490611600565b6001600160a01b038216611a725760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206361737420746f20746865207a65726f2061646472657373006044820152606401610a45565b600254611a7f90826116b0565b6002556001600160a01b038216600090815260208190526040902054611aa590826116b0565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611b5b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a45565b611b9881604051806060016040528060228152602001611f09602291396001600160a01b038516600090815260208190526040902054919061152d565b6001600160a01b038316600090815260208190526040902055600254611bbe9082611769565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611aef565b600060208083528351808285015260005b81811015611c2c57858101830151858201604001528201611c10565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e3257600080fd5b600060208284031215611c7457600080fd5b81356115e981611c4d565b60008060408385031215611c9257600080fd5b8235611c9d81611c4d565b946020939093013593505050565b600060208284031215611cbd57600080fd5b5035919050565b600080600060608486031215611cd957600080fd5b8335611ce481611c4d565b92506020840135611cf481611c4d565b929592945050506040919091013590565b8015158114610e3257600080fd5b60008060408385031215611d2657600080fd5b8235611d3181611c4d565b91506020830135611d4181611d05565b809150509250929050565b60008060408385031215611d5f57600080fd5b8235611d6a81611c4d565b91506020830135611d4181611c4d565b600181811c90821680611d8e57607f821691505b602082108103611dae57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561085857610858611db4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600082611e2657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060018201611e7257611e72611db4565b5060010190565b808202811582820484141761085857610858611db4565b8082018281126000831280158216821582161715611eb057611eb0611db4565b505092915050565b8082018082111561085857610858611db4565b600060208284031215611edd57600080fd5b81516115e981611d05565b818103600083128015838313168383128216171561190057611900611db456fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201002be3121cf8b6bacd8870bccb32025e3fa53491a1020a163d053bd9704560464736f6c63430008110033000000000000000000000000b57b60debdb0b8172bb6316a9164bd3c695f133a00000000000000000000000000000000000000000000003635c9adc5dea00000