608060405234801561001057600080fd5b50600160005561001e610043565b600580546001600160a01b0319166001600160a01b0392909216919091179055610047565b3390565b61243e806100566000396000f3fe608060405234801561001057600080fd5b50600436106102255760003560e01c806380faa57d1161012a578063c8f33c91116100bd578063ebe2b12b1161008c578063f34822b411610071578063f34822b41461052e578063f69e2046146105b9578063f7c618c1146105c157610225565b8063ebe2b12b14610500578063f2fde38b1461050857610225565b8063c8f33c91146104e0578063cd3daf9d146104e8578063df136d65146104f0578063e9fad8ee146104f857610225565b8063a75a2c9a116100f9578063a75a2c9a14610484578063a90174811461048c578063a9d637e1146104b2578063c45a0155146104d857610225565b806380faa57d1461044f5780638456cb59146104575780638da5cb5b1461045f578063a694fc3a1461046757610225565b80633d18b912116101bd5780635c975abb1161018c57806372f702f31161017157806372f702f314610437578063750142e61461043f5780637b0a47ee1461044757610225565b80635c975abb146103f557806370a082311461041157610225565b80633d18b9121461039b5780633f4ba83a146103a35780634b324960146103ab578063598903e2146103cf57610225565b80631959a002116101f95780631959a0021461030f57806323fad52e14610353578063246132f91461035b5780632e1a7d4d1461037e57610225565b80628cc2621461022a57806306fdde031461026257806308fcfbbe146102df57806318160ddd14610307575b600080fd5b6102506004803603602081101561024057600080fd5b50356001600160a01b03166105c9565b60408051918252519081900360200190f35b61026a610633565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610305600480360360208110156102f557600080fd5b50356001600160a01b03166106c1565b005b61025061075f565b6103356004803603602081101561032557600080fd5b50356001600160a01b0316610766565b60408051938452602084019290925282820152519081900360600190f35b610305610787565b6103056004803603604081101561037157600080fd5b5080359060200135610827565b6103056004803603602081101561039457600080fd5b5035610a51565b610305610cae565b610305610f22565b6103b3611027565b604080516001600160a01b039092168252519081900360200190f35b610305600480360360208110156103e557600080fd5b50356001600160a01b0316611036565b6103fd6110d4565b604080519115158252519081900360200190f35b6102506004803603602081101561042757600080fd5b50356001600160a01b03166110e4565b6103b36110ff565b61025061110e565b610250611114565b61025061111a565b61030561112d565b6103b361122b565b6103056004803603602081101561047d57600080fd5b503561123a565b6102506114db565b610250600480360360208110156104a257600080fd5b50356001600160a01b0316611521565b610250600480360360208110156104c857600080fd5b50356001600160a01b031661153f565b6103b361164b565b61025061165a565b610250611660565b6102506116ae565b6103056116b4565b6102506116d6565b6103056004803603602081101561051e57600080fd5b50356001600160a01b03166116dc565b6103056004803603608081101561054457600080fd5b81019060208101813564010000000081111561055f57600080fd5b82018360208201111561057157600080fd5b8035906020019184600183028401116401000000008311171561059357600080fd5b91935091506001600160a01b038135811691602081013582169160409091013516611757565b6103056118fb565b6103b3611bdd565b6001600160a01b0381166000908152600d60205260408120805460019091015461062d919061062790670de0b6b3a764000090610621906106129061060c611660565b90611bec565b61061b886110e4565b90611c49565b90611ca9565b90611d10565b92915050565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106b95780601f1061068e576101008083540402835291602001916106b9565b820191906000526020600020905b81548152906001019060200180831161069c57829003601f168201915b505050505081565b6001546001600160a01b03166106d5611d6a565b6001600160a01b031614610730576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c545b90565b600d6020526000908152604090208054600182015460029092015490919083565b6001546001600160a01b031661079b611d6a565b6001600160a01b0316146107f6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600154610821906001600160a01b031661080e6114db565b6002546001600160a01b03169190611d6e565b42600755565b6001546001600160a01b031661083b611d6a565b6001600160a01b031614610896576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60006108a0611660565b600a556108ab61111a565b6009556001600160a01b038116156108eb576108c6816105c9565b6001600160a01b0382166000908152600d60205260409020908155600a546001909101555b60075442106109605760008211610949576040805162461bcd60e51b815260206004820152601860248201527f4c5042414e4b3a3a494e56414c49445f4455524154494f4e0000000000000000604482015290519081900360640190fd5b6109538383611ca9565b600855600b839055610a08565b816109b9576007546000906109759042611bec565b9050600061098e60085483611c4990919063ffffffff16565b905061099e826106218784611d10565b600855600b546109ae9086611d10565b600b5550610a089050565b6007546000906109c99042611bec565b905060006109e260085483611c4990919063ffffffff16565b90506109f2846106218784611d10565b600855600b54610a029086611d10565b600b5550505b610a124283611d10565b600755426009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b600154600160a01b900460ff1615610aa2576040805162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b604482015290519081900360640190fd5b60026000541415610afa576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610b07611d6a565b610b0f611660565b600a55610b1a61111a565b6009556001600160a01b03811615610b5a57610b35816105c9565b6001600160a01b0382166000908152600d60205260409020908155600a546001909101555b60008211610baf576040805162461bcd60e51b815260206004820152601660248201527f5354414b42414e4b3a3a454d5054595f414d4f554e5400000000000000000000604482015290519081900360640190fd5b600c54610bbc9083611bec565b600c55610bef82600e6000610bcf611d6a565b6001600160a01b0316815260208101919091526040016000205490611bec565b600e6000610bfb611d6a565b6001600160a01b03168152602081019190915260400160002055610c33610c20611d6a565b6003546001600160a01b03169084611d6e565b42600d6000610c40611d6a565b6001600160a01b03168152602081019190915260400160002060020155610c65611d6a565b6001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a250506001600055565b600154600160a01b900460ff1615610cff576040805162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b604482015290519081900360640190fd5b60026000541415610d57576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610d64611d6a565b610d6c611660565b600a55610d7761111a565b6009556001600160a01b03811615610db757610d92816105c9565b6001600160a01b0382166000908152600d60205260409020908155600a546001909101555b6000610dc9610dc4611d6a565b6105c9565b90508015610f19576000610df26064610621610deb610de6611d6a565b61153f565b8590611c49565b90506000600d6000610e02611d6a565b6001600160a01b03168152602081019190915260400160002055610e3a610e27611d6a565b6002546001600160a01b03169084611d6e565b6004546001600160a01b03166340c10f19610e53611d6a565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d6020811015610ec457600080fd5b50610ecf9050611d6a565b6001600160a01b03167fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f518383604051808381526020018281526020019250505060405180910390a2505b50506001600055565b6001546001600160a01b0316610f36611d6a565b6001600160a01b031614610f91576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600154600160a01b900460ff16610fef576040805162461bcd60e51b815260206004820152601360248201527f434f4e54524143545f4e4f545f50415553454400000000000000000000000000604482015290519081900360640190fd5b6001805460ff60a01b191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6004546001600160a01b031681565b6001546001600160a01b031661104a611d6a565b6001600160a01b0316146110a5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600154600160a01b900460ff1681565b6001600160a01b03166000908152600e602052604090205490565b6003546001600160a01b031681565b600b5481565b60085481565b600061112842600754611df3565b905090565b6001546001600160a01b0316611141611d6a565b6001600160a01b03161461119c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600154600160a01b900460ff16156111ed576040805162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6001546001600160a01b031681565b600154600160a01b900460ff161561128b576040805162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b604482015290519081900360640190fd5b600260005414156112e3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556112f0611d6a565b6112f8611660565b600a5561130361111a565b6009556001600160a01b038116156113435761131e816105c9565b6001600160a01b0382166000908152600d60205260409020908155600a546001909101555b60008211611398576040805162461bcd60e51b815260206004820152601660248201527f5354414b42414e4b3a3a454d5054595f414d4f554e5400000000000000000000604482015290519081900360640190fd5b600c546113a59083611d10565b600c556113d882600e60006113b8611d6a565b6001600160a01b0316815260208101919091526040016000205490611d10565b600e60006113e4611d6a565b6001600160a01b0316815260208101919091526040016000205561141d611409611d6a565b6003546001600160a01b0316903085611e09565b600d6000611429611d6a565b6001600160a01b031681526020810191909152604001600020600201546114795742600d6000611457611d6a565b6001600160a01b0316815260208101919091526040016000206002015561148a565b61148a82611485611d6a565b611e97565b611492611d6a565b6001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040518082815260200191505060405180910390a250506001600055565b60004260075410611519576007546000906114f69042611bec565b9050600061150f60085483611c4990919063ffffffff16565b9250610763915050565b506000610763565b6001600160a01b03166000908152600d602052604090206002015490565b6001600160a01b0381166000908152600d60205260408120600201548190816115684283611bec565b9050600061158762278d006106216115808583611f0b565b8590611bec565b9050806002141561159b57606e9350611641565b80600314156115ad5760789350611641565b80600414156115bf5760829350611641565b80600514156115d157608c9350611641565b80600614156115e35760969350611641565b80600714156115f55760a09350611641565b80600814156116075760aa9350611641565b80600914156116195760b49350611641565b80600a141561162b5760be9350611641565b600b811061163c5760c89350611641565b600093505b5091949350505050565b6005546001600160a01b031681565b60095481565b600061166a61075f565b6116775750600a54610763565b6111286116a561168561075f565b610621670de0b6b3a764000061061b60085461061b60095461060c61111a565b600a5490611d10565b600a5481565b6116cc6116c76116c2611d6a565b6110e4565b610a51565b6116d4610cae565b565b60075481565b6001546001600160a01b03166116f0611d6a565b6001600160a01b03161461174b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61175481611f72565b50565b6005546001600160a01b031661176b611d6a565b6001600160a01b0316146117c6576040805162461bcd60e51b815260206004820152601660248201527f5354414b42414e4b3a3a554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6117d260068686612304565b50600380546001600160a01b0380861673ffffffffffffffffffffffffffffffffffffffff1992831617928390556002805486831690841617808255600480548785169086161790556001805460ff60a01b1995163217949094168455604080519584166020870181905291909316928501839052606080865260068054958616156101000260001901909516929092049185018290527ff1bc21ed97ab3f0ef33f31038b179da31c46944bec01f4410240814d0571adea9490929181906080820190869080156118e45780601f106118b9576101008083540402835291602001916118e4565b820191906000526020600020905b8154815290600101906020018083116118c757829003601f168201915b505094505050505060405180910390a15050505050565b600154600160a01b900460ff161561194c576040805162461bcd60e51b815260206004820152600f60248201526e10d3d395149050d517d4105554d151608a1b604482015290519081900360640190fd5b600260005414156119a4576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556119b1611d6a565b6119b9611660565b600a556119c461111a565b6009556001600160a01b03811615611a04576119df816105c9565b6001600160a01b0382166000908152600d60205260409020908155600a546001909101555b6000611a11610dc4611d6a565b90506000611a286064610621610deb610de6611d6a565b905060008211611a7f576040805162461bcd60e51b815260206004820152601c60248201527f5354414b42414e4b3a3a5a45524f5f5245574152445f414d4f554e5400000000604482015290519081900360640190fd5b6000600d6000611a8d611d6a565b6001600160a01b03168152602081019190915260400160002055600c54611ab49083611d10565b600c55611ac782600e60006113b8611d6a565b600e6000611ad3611d6a565b6001600160a01b039081168252602082019290925260400160002091909155600454166340c10f19611b03611d6a565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b505050506040513d6020811015611b7457600080fd5b50611b83905082611485611d6a565b611b8b611d6a565b6001600160a01b03167fd2b62972eb64ab9995c1c10b527dbc3030a985d543659d031c4d9f1f8f6e280c8383604051808381526020018281526020019250505060405180910390a25050600160005550565b6002546001600160a01b031681565b600082821115611c43576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082611c585750600061062d565b82820282848281611c6557fe5b0414611ca25760405162461bcd60e51b81526004018080602001828103825260218152602001806123be6021913960400191505060405180910390fd5b9392505050565b6000808211611cff576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611d0857fe5b049392505050565b600082820183811015611ca2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611dee908490612036565b505050565b6000818310611e025781611ca2565b5090919050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611e91908590612036565b50505050565b6001600160a01b0381166000908152600d602052604081206002015490611ebd836110e4565b90506000611ee5611ece8387611d10565b610621611edb4289611c49565b6106278787611c49565b6001600160a01b039094166000908152600d602052604090206002019390935550505050565b6000808211611f61576040805162461bcd60e51b815260206004820152601860248201527f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000604482015290519081900360640190fd5b818381611f6a57fe5b069392505050565b6001600160a01b038116611fcd576040805162461bcd60e51b815260206004820152601560248201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b606061208b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120e79092919063ffffffff16565b805190915015611dee578080602001905160208110156120aa57600080fd5b5051611dee5760405162461bcd60e51b815260040180806020018281038252602a8152602001806123df602a913960400191505060405180910390fd5b60606120f684846000856120fe565b949350505050565b60608247101561213f5760405162461bcd60e51b81526004018080602001828103825260268152602001806123986026913960400191505060405180910390fd5b6121488561225a565b612199576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106121d85780518252601f1990920191602091820191016121b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461223a576040519150601f19603f3d011682016040523d82523d6000602084013e61223f565b606091505b509150915061224f828286612260565b979650505050505050565b3b151590565b6060831561226f575081611ca2565b82511561227f5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122c95781810151838201526020016122b1565b50505050905090810190601f1680156122f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106123455782800160ff19823516178555612372565b82800160010185558215612372579182015b82811115612372578235825591602001919060010190612357565b5061237e929150612382565b5090565b5b8082111561237e576000815560010161238356fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212201d648991746a72cab0af34be99f11c9f89388f240a73e6742504351a2503029164736f6c63430007010033