//
0x608060405260048054600160a01b60ff021916905534801561002057600080fd5b50604051604080620023da8339810180604052604081101561004157600080fd5b50805160209182015160008054336001600160a01b03199182168117835560028054909216179055604080517fd246699d0000000000000000000000000000000000000000000000000000000081529051939492936001600160a01b0385169363d246699d936004808501949293928390030190829087803b1580156100c657600080fd5b505af11580156100da573d6000803e3d6000fd5b505050506040513d60208110156100f057600080fd5b5051151561015f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6973416c69616e612066616c7365000000000000000000000000000000000000604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055601e600d5561223a80620001a06000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638456cb5911610125578063d17fb3de116100ad578063ef76383f1161007c578063ef76383f146107cf578063f2fde38b14610813578063f3052c7e14610839578063f50e622914610841578063fc6868f71461085e5761021c565b8063d17fb3de1461065f578063df8de3e714610700578063e2ec6ec314610726578063ea4ce239146107c75761021c565b80639f66063f116100f45780639f66063f146105e9578063b047fb501461060f578063b90e115814610617578063bde52be21461063a578063cd90dfdf146106575761021c565b80638456cb59146104f05780638da5cb5b146104f85780638f4ffcb1146105005780639b19251a146105c35761021c565b80632ba73c15116101a85780635c975abb116101775780635c975abb1461045e5780635e35359e146104665780636af04a571461049c57806371587988146104a45780637b9417c8146104ca5761021c565b80632ba73c15146104025780633f4ba83a1461042857806344cb9d03146104305780634e0a3379146104385761021c565b806321fffbab116101ef57806321fffbab146102c857806324953eaa146102e257806327d7874c14610397578063286dd3f5146103bf5780632ac871fb146103e55761021c565b80630519ce79146102215780630a0f8168146102455780631589a4fd1461024d5780631f7d1b1114610255575b600080fd5b61022961087b565b604080516001600160a01b039092168252519081900360200190f35b61022961088a565b610229610899565b6102786004803603604081101561026b57600080fd5b50803590602001356108a8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102b457818101518382015260200161029c565b505050509050019250505060405180910390f35b6102d0610996565b60408051918252519081900360200190f35b610383600480360360208110156102f857600080fd5b810190602081018135600160201b81111561031257600080fd5b82018360208201111561032457600080fd5b803590602001918460208302840111600160201b8311171561034557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061099c945050505050565b604080519115158252519081900360200190f35b6103bd600480360360208110156103ad57600080fd5b50356001600160a01b03166109f8565b005b610383600480360360208110156103d557600080fd5b50356001600160a01b0316610a46565b6103bd600480360360208110156103fb57600080fd5b5035610add565b6103bd6004803603602081101561041857600080fd5b50356001600160a01b0316610c27565b6103bd610c75565b610278610cb6565b6103bd6004803603602081101561044e57600080fd5b50356001600160a01b0316610d0f565b610383610d5d565b6103bd6004803603606081101561047c57600080fd5b506001600160a01b03813581169160208101359091169060400135610d6d565b610229610e1d565b6103bd600480360360208110156104ba57600080fd5b50356001600160a01b0316610e2c565b610383600480360360208110156104e057600080fd5b50356001600160a01b0316610eaf565b6103bd610f4a565b610229610fbc565b6103bd6004803603608081101561051657600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561054f57600080fd5b82018360208201111561056157600080fd5b803590602001918460018302840111600160201b8311171561058257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcb945050505050565b610383600480360360208110156105d957600080fd5b50356001600160a01b0316611119565b610278600480360360208110156105ff57600080fd5b50356001600160a01b031661112e565b61022961118f565b6103bd6004803603604081101561062d57600080fd5b508035906020013561119e565b6103bd6004803603602081101561065057600080fd5b50356111c4565b6102296111ef565b6103bd6004803603602081101561067557600080fd5b810190602081018135600160201b81111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460208302840111600160201b831117156106c257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111fe945050505050565b6103bd6004803603602081101561071657600080fd5b50356001600160a01b031661136a565b6103836004803603602081101561073c57600080fd5b810190602081018135600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611506945050505050565b6102d061155c565b6107ec600480360360208110156107e557600080fd5b5035611562565b6040805193845260208401929092526001600160a01b031682820152519081900360600190f35b6103bd6004803603602081101561082957600080fd5b50356001600160a01b03166115b1565b6102d0611638565b6103bd6004803603602081101561085757600080fd5b503561163e565b6103bd6004803603602081101561087457600080fd5b503561165f565b6003546001600160a01b031681565b6002546001600160a01b031681565b6007546001600160a01b031681565b606060006108b461155c565b90508215806108c35750808410155b156108de575050604080516000815260208101909152610990565b82816108f0868363ffffffff61166916565b11156108fb57508381035b600061090d868363ffffffff61166916565b905060608260405190808252806020026020018201604052801561093b578160200160208202803883390190505b5090506000875b8381101561098757600a80548290811061095857fe5b9060005260206000200154838381518110151561097157fe5b6020908102909101015260019182019101610942565b50909450505050505b92915050565b600d5481565b600080546001600160a01b031633146109b457600080fd5b60005b82518110156109f2576109e083828151811015156109d157fe5b90602001906020020151610a46565b156109ea57600191505b6001016109b7565b50919050565b6002546001600160a01b03163314610a0f57600080fd5b6001600160a01b0381161515610a2457600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610a5e57600080fd5b6001600160a01b03821660009081526001602052604090205460ff1615610ad8576001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a15060015b919050565b6004546001600160a01b0316331480610b0057506002546001600160a01b031633145b80610b1557506003546001600160a01b031633145b1515610b2057600080fd5b600e54811115610b2f57600080fd5b60065460408051600160e01b6323b872dd0281523060048201523360248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050506040513d6020811015610bb657600080fd5b50511515610c0e5760408051600160e51b62461bcd02815260206004820152601c60248201527f6661696c656420746f207472616e736665722067616520746f6b656e00000000604482015290519081900360640190fd5b600e54610c21908263ffffffff6116cd16565b600e5550565b6002546001600160a01b03163314610c3e57600080fd5b6001600160a01b0381161515610c5357600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610c8c57600080fd5b600454600160a01b900460ff161515610ca457600080fd5b60048054600160a01b60ff0219169055565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d0457602002820191906000526020600020905b815481526020019060010190808311610cf0575b505050505090505b90565b6002546001600160a01b03163314610d2657600080fd5b6001600160a01b0381161515610d3b57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600454600160a01b900460ff1681565b6002546001600160a01b03163314610d8457600080fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b505050506040513d6020811015610e0e57600080fd5b50511515610e1857fe5b505050565b6005546001600160a01b031681565b6002546001600160a01b03163314610e4357600080fd5b600454600160a01b900460ff161515610e5b57600080fd5b600580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa4461993059181900360200190a150565b600080546001600160a01b03163314610ec757600080fd5b6001600160a01b03821660009081526001602052604090205460ff161515610ad8576001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b6004546001600160a01b0316331480610f6d57506002546001600160a01b031633145b80610f8257506003546001600160a01b031633145b1515610f8d57600080fd5b600454600160a01b900460ff1615610fa457600080fd5b60048054600160a01b60ff021916600160a01b179055565b6000546001600160a01b031681565b60208101516001811480610fdf5750806002145b15156110355760408051600160e51b62461bcd02815260206004820152600d60248201527f756e6b6e6f7720616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b80600114156110a2576006546001600160a01b0384811691161461108d57604051600160e51b62461bcd0281526004018080602001828103825260388152602001806121af6038913960400191505060405180910390fd5b604082015161109c868261170f565b50611112565b8060021415611112576007546001600160a01b038481169116146110fa57604051600160e51b62461bcd02815260040180806020018281038252603c815260200180612173603c913960400191505060405180910390fd5b6040820151606083015161110f878383611a39565b50505b5050505050565b60016020526000908152604090205460ff1681565b606061113982611c33565b80548060200260200160405190810160405280929190818152602001828054801561118357602002820191906000526020600020905b81548152602001906001019080831161116f575b50505050509050919050565b6004546001600160a01b031681565b600454600160a01b900460ff16156111b557600080fd5b6111c0338383611a39565b5050565b6002546001600160a01b031633146111db57600080fd5b6127108111156111ea57600080fd5b600d55565b6006546001600160a01b031681565b6004546001600160a01b031633148061122157506002546001600160a01b031633145b8061123657506003546001600160a01b031633145b151561124157600080fd5b60005b81518110156111c0576000828281518110151561125d57fe5b60209081029091018101516000818152600c909252604090912090915061128381611c4d565b1561136057600754600382015460408051600160e01b6323b872dd0281523060048201526001600160a01b03928316602482015260448101869052905191909216916323b872dd91606480830192600092919082900301818387803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b505050600382015461131b91506001600160a01b031683611c56565b60038101546040805184815290516001600160a01b03909216917f855aacbac020c9240e5d36610362ec97c341cacea4a89ba876237e14bcb304e19181900360200190a25b5050600101611244565b6002546001600160a01b0316331461138157600080fd5b6001600160a01b03811615156113c4576040513390303180156108fc02916000818181858888f193505050501580156113be573d6000803e3d6000fd5b50611503565b60408051600160e01b6370a08231028152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561141257600080fd5b505afa158015611426573d6000803e3d6000fd5b505050506040513d602081101561143c57600080fd5b505160408051600160e01b63a9059cbb0281523360048201526024810183905290519192506001600160a01b0384169163a9059cbb916044808201926020929091908290030181600087803b15801561149457600080fd5b505af11580156114a8573d6000803e3d6000fd5b505050506040513d60208110156114be57600080fd5b505060408051828152905133916001600160a01b038616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c9181900360200190a350505b50565b600080546001600160a01b0316331461151e57600080fd5b60005b82518110156109f25761154a838281518110151561153b57fe5b90602001906020020151610eaf565b1561155457600191505b600101611521565b600a5490565b6000818152600c60205260409020600181015460028201546003830154919290916001600160a01b03169061159681611c4d565b15156115a9576000935060009250600091505b509193909250565b6000546001600160a01b031633146115c857600080fd5b6001600160a01b03811615156115dd57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b600454600160a01b900460ff161561165557600080fd5b611503338261170f565b6115033382611ca6565b6000828201838110156116c65760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006116c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e59565b600454600160a01b900460ff161561172657600080fd5b6000818152600c6020526040902061173d81611c4d565b15156117935760408051600160e51b62461bcd02815260206004820152601860248201527f74617267657420746f6b656e206e6f74206f6e2073616c650000000000000000604482015290519081900360640190fd5b600654600282015460408051600160e01b6323b872dd0281526001600160a01b0387811660048301523060248301526044820193909352905191909216916323b872dd9160648083019260209291908290030181600087803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505050506040513d602081101561182257600080fd5b5051151561186457604051600160e51b62461bcd0281526004018080602001828103825260288152602001806121e76028913960400191505060405180910390fd5b60006118738260020154611ef3565b6002830154600e5491925082900390611892908363ffffffff61166916565b600e55600654600384015460408051600160e01b6323b872dd0281523060048201526001600160a01b03928316602482015260448101859052905191909216916323b872dd9160648083019260209291908290030181600087803b1580156118f957600080fd5b505af115801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b5051151561196557604051600160e51b62461bcd02815260040180806020018281038252602681526020018061214d6026913960400191505060405180910390fd5b60075460408051600160e01b6323b872dd0281523060048201526001600160a01b03888116602483015260448201889052915191909216916323b872dd91606480830192600092919082900301818387803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b50505060038401546119f391506001600160a01b031685611c56565b600383015460405185916001600160a01b03808916929116907fab45b949a37ecd984d754e236ec91c509ac61761563a51513b9a05d465f28f8790600090a45050505050565b600454600160a01b900460ff1615611a5057600080fd5b60075460408051600160e11b6331a9108f0281526004810185905290516001600160a01b03808716931691636352211e916024808301926020929190829003018186803b158015611aa057600080fd5b505afa158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b50516001600160a01b031614611b2a5760408051600160e51b62461bcd02815260206004820152601d60248201527f416c69616e6153616c653a206d75737420626520746865206f776e6572000000604482015290519081900360640190fd5b60075460408051600160e01b6323b872dd0281526001600160a01b03868116600483015230602483015260448201869052915191909216916323b872dd91606480830192600092919082900301818387803b158015611b8857600080fd5b505af1158015611b9c573d6000803e3d6000fd5b50505050611baa8383611eff565b611bb382611f3d565b6000828152600c6020908152604091829020848155436001820155600281018490556003810180546001600160a01b0319166001600160a01b038816908117909155835185815293519193869391927ffdd18ec8ae32608213edbbbd441d63341c4c65313cde9de8fb7160845127890f929181900390910190a350505050565b6001600160a01b0316600090815260086020526040902090565b60010154151590565b611c608282611f81565b600081815260096020526040812055611c7881612071565b6000908152600c60205260408120600181018290556003810180546001600160a01b03191690556002015550565b6000818152600c60205260409020611cbd81611c4d565b1515611d135760408051600160e51b62461bcd02815260206004820152601860248201527f74617267657420746f6b656e206e6f74206f6e2073616c650000000000000000604482015290519081900360640190fd5b60038101546001600160a01b039081169084168114611d7c5760408051600160e51b62461bcd02815260206004820152601560248201527f796f75277265206e6f74207468652073656c6c65720000000000000000000000604482015290519081900360640190fd5b600754600383015460408051600160e01b6323b872dd0281523060048201526001600160a01b03928316602482015260448101879052905191909216916323b872dd91606480830192600092919082900301818387803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b5050506003830154611e0f91506001600160a01b031684611c56565b60038201546040805185815290516001600160a01b03909216917f855aacbac020c9240e5d36610362ec97c341cacea4a89ba876237e14bcb304e19181900360200190a250505050565b60008184841115611eeb57604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb0578181015183820152602001611e98565b50505050905090810190601f168015611edd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600d5461271091020490565b6001600160a01b0390911660009081526008602081815260408084208054868652600984529185208290559282526001810183559183529091200155565b600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b6001600160a01b038216600090815260086020526040812054611fab90600163ffffffff6116cd16565b600083815260096020526040902054909150808214612048576001600160a01b0384166000908152600860205260408120805484908110611fe857fe5b906000526020600020015490508060086000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110151561202857fe5b600091825260208083209091019290925591825260099052604090208190555b6001600160a01b038416600090815260086020526040902080549061111290600019830161210f565b600a5460009061208890600163ffffffff6116cd16565b6000838152600b6020526040812054600a80549394509092849081106120aa57fe5b9060005260206000200154905080600a838154811015156120c757fe5b6000918252602080832090910192909255828152600b90915260409020829055600a8054906120fa90600019830161210f565b505050600091825250600b6020526040812055565b815481835581811115610e1857600083815260209020610e18918101908301610d0c91905b808211156121485760008155600101612134565b509056fe6661696c656420746f207472616e736665722067616520746f6b656e20746f2073656c6c6572617070726f76616c20616e642077616e742073616c65206120616c69616e612c20627574207573656420746f6b656e2069736e277420416c69616e61617070726f76616c20616e642077616e7420627579206120616c69616e612c20627574207573656420746f6b656e2069736e2774204746546661696c656420746f207472616e736665722067616520746f6b656e20746f20636f6e7472616374a165627a7a72305820c1498ce24f37259624900a7eb32c483f83a6f4dad339a009ba7576a7df5aeeb7002900000000000000000000000017df9fbfc1cdab0f90eddc318c4f6fcada730cf200000000000000000000000082454302f9293b8c8f892ebce97f1b6defc54133