0x60806040526000805460ff60a01b1916600160a01b178155600280546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905561004e6001600160e01b0361009d16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100a1565b3390565b612bc4806100b06000396000f3fe60806040526004361061012d5760003560e01c80637a950f99116100ab578063aa1566451161006f578063aa156645146102f8578063c4f987a514610318578063d1e742b614610338578063e1f21c671461034b578063f2fde38b1461036b578063fa461e331461038b57610134565b80637a950f991461026e578063806ad57e146102815780638da5cb5b146102a15780638f32d59b146102c357806397e10a79146102d857610134565b806341c0e1b5116100f257806341c0e1b5146101f157806366dd0f24146102065780636b557a22146102195780636e07c47014610239578063715018a61461025957610134565b8062f714ce146101395780630111efb71461015b5780630ae75d1d1461017b57806310d1e85c1461019b5780634048a257146101bb57610134565b3661013457005b600080fd5b34801561014557600080fd5b50610159610154366004612536565b6103ab565b005b34801561016757600080fd5b506101596101763660046122e8565b61062b565b34801561018757600080fd5b50610159610196366004612366565b6106f9565b3480156101a757600080fd5b506101596101b6366004612280565b61073b565b3480156101c757600080fd5b506101db6101d6366004612127565b61097e565b6040516101e8919061263d565b60405180910390f35b3480156101fd57600080fd5b50610159610993565b610159610214366004612506565b6109ba565b34801561022557600080fd5b50610159610234366004612323565b610a26565b34801561024557600080fd5b50610159610254366004612536565b610b71565b34801561026557600080fd5b50610159610c33565b6101db61027c3660046121ef565b610ca1565b34801561028d57600080fd5b5061015961029c366004612127565b6110dc565b3480156102ad57600080fd5b506102b6611170565b6040516101e891906125b0565b3480156102cf57600080fd5b506101db61117f565b3480156102e457600080fd5b506101596102f336600461223f565b6111a3565b34801561030457600080fd5b506101db610313366004612127565b61126f565b34801561032457600080fd5b50610159610333366004612127565b61128d565b6101db61034636600461215f565b6112f8565b34801561035757600080fd5b506101596103663660046121af565b6115c6565b34801561037757600080fd5b50610159610386366004612127565b611688565b34801561039757600080fd5b506101596103a63660046123c1565b6116b5565b6103b361117f565b6103d85760405162461bcd60e51b81526004016103cf906128c2565b60405180910390fd5b6002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906104099030906004016125b0565b60206040518083038186803b15801561042157600080fd5b505afa158015610435573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610459919061251e565b905082811061054657600254604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610492908690600401612acd565b600060405180830381600087803b1580156104ac57600080fd5b505af11580156104c0573d6000803e3d6000fd5b505050506000826001600160a01b0316846040516104dd906125ad565b60006040518083038185875af1925050503d806000811461051a576040519150601f19603f3d011682016040523d82523d6000602084013e61051f565b606091505b50509050806105405760405162461bcd60e51b81526004016103cf90612921565b50610626565b600254604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610576908490600401612acd565b600060405180830381600087803b15801561059057600080fd5b505af11580156105a4573d6000803e3d6000fd5b505050506000826001600160a01b0316826040516105c1906125ad565b60006040518083038185875af1925050503d80600081146105fe576040519150601f19603f3d011682016040523d82523d6000602084013e610603565b606091505b50509050806106245760405162461bcd60e51b81526004016103cf90612921565b505b505050565b61063361117f565b61064f5760405162461bcd60e51b81526004016103cf906128c2565b60005b81518110156106d057600082828151811061066957fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156106a65760405162461bcd60e51b81526004016103cf90612980565b6001600160a01b03166000908152600160208190526040909120805460ff19168217905501610652565b50600054600160a01b900460ff166106f6576000805460ff60a01b1916600160a01b1790555b50565b61070161117f565b61071d5760405162461bcd60e51b81526004016103cf906128c2565b60008054911515600160a01b0260ff60a01b19909216919091179055565b610743612017565b61074f82840184612471565b9050600081604001516107d65781600001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190612143565b61084b565b81600001516001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561081357600080fd5b505afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190612143565b90506000826040015161085e5786610860565b855b835160025491925060009182916108819186906001600160a01b0316611823565b9150915060006108928484846118f2565b905060008087604001516108a8576000836108ac565b8260005b915091506108bf878960000151886119a4565b87516001600160a01b031663022c0d9f83833060006040519080825280601f01601f1916602001820160405280156108fe576020820181803683370190505b506040518563ffffffff1660e01b815260040161091e9493929190612ad6565b600060405180830381600087803b15801561093857600080fd5b505af115801561094c573d6000803e3d6000fd5b505060025460208b015161096f93506001600160a01b03909116915033906119a4565b50505050505050505050505050565b60016020526000908152604090205460ff1681565b61099b61117f565b6109b75760405162461bcd60e51b81526004016103cf906128c2565b33ff5b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a0a57600080fd5b505af1158015610a1e573d6000803e3d6000fd5b505050505050565b610a2e61117f565b610a4a5760405162461bcd60e51b81526004016103cf906128c2565b6000610a60835183611a8b90919063ffffffff16565b905080471015610acd57600254604051632e1a7d4d60e01b81526001600160a01b0390911690632e1a7d4d90610a9a908490600401612acd565b600060405180830381600087803b158015610ab457600080fd5b505af1158015610ac8573d6000803e3d6000fd5b505050505b60005b8351811015610624576000848281518110610ae757fe5b60200260200101516001600160a01b031684604051610b05906125ad565b60006040518083038185875af1925050503d8060008114610b42576040519150601f19603f3d011682016040523d82523d6000602084013e610b47565b606091505b5050905080610b685760405162461bcd60e51b81526004016103cf90612921565b50600101610ad0565b610b7961117f565b610b955760405162461bcd60e51b81526004016103cf906128c2565b4715610c2f57476000818411610bab5783610bad565b815b90506000836001600160a01b031682604051610bc8906125ad565b60006040518083038185875af1925050503d8060008114610c05576040519150601f19603f3d011682016040523d82523d6000602084013e610c0a565b606091505b5050905080610c2b5760405162461bcd60e51b81526004016103cf90612921565b5050505b5050565b610c3b61117f565b610c575760405162461bcd60e51b81526004016103cf906128c2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600081431115610cc35760405162461bcd60e51b81526004016103cf9061270f565b6000866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d369190612143565b90506000876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190612143565b90506000610db883611ace565b9050600081610dc75783610dc9565b825b9050610dd3612037565b60405180608001604052808c6001600160a01b0316815260200184151581526020018a8152602001836001600160a01b0316815250905088600114610eec57826001600160a01b038b1663128acb088d83610e2d8d611af3565b85610e4c5773fffd8963efd1fc6a506488495d951d5263988d25610e53565b6401000276a45b87604051602001610e649190612a68565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610e939594939291906125de565b6040805180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee4919061239e565b505050610fc6565b82156001600160a01b038b1663128acb083083610f088d611af3565b60000385610f2a5773fffd8963efd1fc6a506488495d951d5263988d25610f31565b6401000276a45b87604051602001610f429190612a68565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610f719594939291906125de565b6040805180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061239e565b5050505b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ff79030906004016125b0565b60206040518083038186803b15801561100f57600080fd5b505afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611047919061251e565b600254909150611068906001600160a01b0316611062611170565b836119a4565b34156110cd57416001600160a01b031634604051611085906125ad565b60006040518083038185875af1925050503d80600081146110c2576040519150601f19603f3d011682016040523d82523d6000602084013e6110c7565b606091505b50909750505b50505050505095945050505050565b6110e461117f565b6111005760405162461bcd60e51b81526004016103cf906128c2565b6001600160a01b0381166111265760405162461bcd60e51b81526004016103cf90612980565b6001600160a01b03811660009081526001602081905260408220805460ff1916909117905554600160a01b900460ff166106f6576000805460ff60a01b1916600160a01b17905550565b6000546001600160a01b031690565b600080546001600160a01b0316611194611b09565b6001600160a01b031614905090565b6111ab61117f565b6111c75760405162461bcd60e51b81526004016103cf906128c2565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906111f69030906004016125b0565b60206040518083038186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611246919061251e565b9050600083158061125657508184115b6112605783611262565b815b9050610c2b8584836119a4565b6001600160a01b031660009081526001602052604090205460ff1690565b61129561117f565b6112b15760405162461bcd60e51b81526004016103cf906128c2565b6001600160a01b0381166112d75760405162461bcd60e51b81526004016103cf90612980565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600254600090819081906113179088906001600160a01b031687611823565b9150915060006113288584846118f2565b60025490915061134490889088906001600160a01b0316611823565b909350915060006113568285856118f2565b90503460011461137f5785811161137f5760405162461bcd60e51b81526004016103cf90612a39565b600254600090611398906001600160a01b031689611b0d565b5060025490915060009081906001600160a01b038085169116146113be578460006113c2565b6000855b915091506113ce612017565b50604080516060810182526001600160a01b03808e16825260208083018d90526002548216878316148385015292519192908f169163022c0d9f9186918691309161141b91889101612aa1565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016114499493929190612ad6565b600060405180830381600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050507f357d905f1831209797df4d55d79c5c5bf1d9f7311c976afd05e13d881eab9bc88a86036040516114ac9190612acd565b60405180910390a16002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906114e59030906004016125b0565b60206040518083038186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611535919061251e565b600254909150611550906001600160a01b0316611062611170565b34156115b557416001600160a01b03163460405161156d906125ad565b60006040518083038185875af1925050503d80600081146115aa576040519150601f19603f3d011682016040523d82523d6000602084013e6115af565b606091505b50909a50505b505050505050505050949350505050565b6115ce61117f565b6115ea5760405162461bcd60e51b81526004016103cf906128c2565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061161b90309087906004016125c4565b60206040518083038186803b15801561163357600080fd5b505afa158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b919061251e565b111561167d5761167d83836000611b97565b610626838383611b97565b61169061117f565b6116ac5760405162461bcd60e51b81526004016103cf906128c2565b6106f681611c7e565b60008413806116c45750600083135b6116cd57600080fd5b6116d5612037565b6116e182840184612412565b905060008086136116f257846116f4565b855b90506000808713611708578660000361170d565b856000035b905082604001516001146117b6578251606084015160025460009261173f9290916001600160a01b0316858730611cff565b90508281116117605760405162461bcd60e51b81526004016103cf906128f7565b7f357d905f1831209797df4d55d79c5c5bf1d9f7311c976afd05e13d881eab9bc88382036040516117919190612acd565b60405180910390a16002546117b0906001600160a01b031633856119a4565b5061181a565b825160025460608501516000926117dd9290916001600160a01b0390911690868633611e2a565b90507f357d905f1831209797df4d55d79c5c5bf1d9f7311c976afd05e13d881eab9bc88183036040516118109190612acd565b60405180910390a1505b50505050505050565b60008060006118328585611b0d565b509050600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a991906124bd565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146118e05780826118e3565b81815b90999098509650505050505050565b60008084116119135760405162461bcd60e51b81526004016103cf906129ee565b6000831180156119235750600082115b61193f5760405162461bcd60e51b81526004016103cf90612839565b6000611953856103e563ffffffff611a8b16565b90506000611967828563ffffffff611a8b16565b9050600061198d83611981886103e863ffffffff611a8b16565b9063ffffffff611ed716565b905080828161199857fe5b04979650505050505050565b60006060846001600160a01b031663a9059cbb85856040516024016119ca929190612624565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611a039190612591565b6000604051808303816000865af19150503d8060008114611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b5091509150818015611a6f575080511580611a6f575080806020019051810190611a6f9190612382565b610c2b5760405162461bcd60e51b81526004016103cf9061265b565b600082611a9a57506000611ac8565b82820282848281611aa757fe5b0414611ac55760405162461bcd60e51b81526004016103cf90612881565b90505b92915050565b6001600160a01b03811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214919050565b6000600160ff1b8210611b0557600080fd5b5090565b3390565b600080826001600160a01b0316846001600160a01b03161415611b425760405162461bcd60e51b81526004016103cf906127f4565b826001600160a01b0316846001600160a01b031610611b62578284611b65565b83835b90925090506001600160a01b038216611b905760405162461bcd60e51b81526004016103cf90612949565b9250929050565b60006060846001600160a01b031663095ea7b38585604051602401611bbd929190612624565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611bf69190612591565b6000604051808303816000865af19150503d8060008114611c33576040519150601f19603f3d011682016040523d82523d6000602084013e611c38565b606091505b5091509150818015611c62575080511580611c62575080806020019051810190611c629190612382565b610c2b5760405162461bcd60e51b81526004016103cf906127bd565b6001600160a01b038116611ca45760405162461bcd60e51b81526004016103cf906126c9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000611d0f898989611823565b91509150611d1e8683836118f2565b9250600083118015611d305750848310155b611d4c5760405162461bcd60e51b81526004016103cf90612692565b6000611d588989611b0d565b509050600080826001600160a01b03168b6001600160a01b031614611d7f57856000611d83565b6000865b90925090506001600160a01b038c1663022c0d9f83838a6000805b506040519080825280601f01601f191660200182016040528015611dc9576020820181803683370190505b506040518563ffffffff1660e01b8152600401611de99493929190612ad6565b600060405180830381600087803b158015611e0357600080fd5b505af1158015611e17573d6000803e3d6000fd5b5050505050505050509695505050505050565b6000806000611e3a898989611823565b91509150611e49868383611efc565b9250600083118015611e5b5750848311155b611e775760405162461bcd60e51b81526004016103cf906129b7565b6000611e838989611b0d565b509050600080826001600160a01b03168b6001600160a01b031614611eaa57886000611eae565b6000895b91509150611ebd8b8d886119a4565b6001600160a01b038c1663022c0d9f83838a600080611d9e565b600082820183811015611ac55760405162461bcd60e51b81526004016103cf9061273a565b6000808411611f1d5760405162461bcd60e51b81526004016103cf90612771565b600083118015611f2d5750600082115b611f495760405162461bcd60e51b81526004016103cf90612839565b6000611f6d6103e8611f61868863ffffffff611a8b16565b9063ffffffff611a8b16565b90506000611f876103e5611f61868963ffffffff611fae16565b9050611fa46001828481611f9757fe5b049063ffffffff611ed716565b9695505050505050565b6000611ac583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506000818484111561200f5760405162461bcd60e51b81526004016103cf9190612648565b505050900390565b604080516060810182526000808252602082018190529181019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600082601f83011261206e578081fd5b813567ffffffffffffffff811115612084578182fd5b6020808202612094828201612b03565b838152935081840185830182870184018810156120b057600080fd5b600092505b848310156120dc5780356120c881612b56565b8252600192909201919083019083016120b5565b505050505092915050565b60008083601f8401126120f8578182fd5b50813567ffffffffffffffff81111561210f578182fd5b602083019150836020828501011115611b9057600080fd5b600060208284031215612138578081fd5b8135611ac581612b56565b600060208284031215612154578081fd5b8151611ac581612b56565b60008060008060808587031215612174578283fd5b843561217f81612b56565b9350602085013561218f81612b56565b9250604085013561219f81612b56565b9396929550929360600135925050565b6000806000606084860312156121c3578283fd5b83356121ce81612b56565b925060208401356121de81612b56565b929592945050506040919091013590565b600080600080600060a08688031215612206578081fd5b853561221181612b56565b9450602086013561222181612b56565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215612253578283fd5b833561225e81612b56565b925060208401359150604084013561227581612b56565b809150509250925092565b600080600080600060808688031215612297578081fd5b85356122a281612b56565b94506020860135935060408601359250606086013567ffffffffffffffff8111156122cb578182fd5b6122d7888289016120e7565b969995985093965092949392505050565b6000602082840312156122f9578081fd5b813567ffffffffffffffff81111561230f578182fd5b61231b8482850161205e565b949350505050565b60008060408385031215612335578182fd5b823567ffffffffffffffff81111561234b578283fd5b6123578582860161205e565b95602094909401359450505050565b600060208284031215612377578081fd5b8135611ac581612b6b565b600060208284031215612393578081fd5b8151611ac581612b6b565b600080604083850312156123b0578182fd5b505080516020909101519092909150565b600080600080606085870312156123d6578182fd5b8435935060208501359250604085013567ffffffffffffffff8111156123fa578283fd5b612406878288016120e7565b95989497509550505050565b600060808284031215612423578081fd5b61242d6080612b03565b823561243881612b56565b8152602083013561244881612b6b565b602082015260408381013590820152606083013561246581612b56565b60608201529392505050565b600060608284031215612482578081fd5b61248c6060612b03565b823561249781612b56565b81526020838101359082015260408301356124b181612b6b565b60408201529392505050565b6000806000606084860312156124d1578081fd5b83516124dc81612b79565b60208501519093506124ed81612b79565b604085015190925063ffffffff81168114612275578182fd5b600060208284031215612517578081fd5b5035919050565b60006020828403121561252f578081fd5b5051919050565b60008060408385031215612548578182fd5b82359150602083013561255a81612b56565b809150509250929050565b6000815180845261257d816020860160208601612b2a565b601f01601f19169290920160200192915050565b600082516125a3818460208701612b2a565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061261990830184612565565b979650505050505050565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252611ac56020830184612565565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b6020808252601c908201527f556e69537761704578616374496e20616d6f756e744f7574206c6f7700000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260119082015270313637b1b590373ab136b2b91037bb32b960791b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602c908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4f60408201526b155514155517d05353d5539560a21b606082015260800190565b6020808252601e908201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604082015260600190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f616d6f756e744f7574207632206c6f7760801b604082015260600190565b6020808252600e908201526d11549497d1551217d1905253115160921b604082015260600190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526017908201527f5f776f726b6572206d75737420626520646566696e6564000000000000000000604082015260600190565b6020808252601d908201527f556e695377617045786163744f757420616d6f756e744f7574206c6f77000000604082015260600190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b6020808252601590820152747377617076323220616d6f756e744f7574206c6f7760581b604082015260600190565b81516001600160a01b03908116825260208084015115159083015260408084015190830152606092830151169181019190915260800190565b81516001600160a01b031681526020808301519082015260409182015115159181019190915260600190565b90815260200190565b600085825284602083015260018060a01b038416604083015260806060830152611fa46080830184612565565b60405181810167ffffffffffffffff81118282101715612b2257600080fd5b604052919050565b60005b83811015612b45578181015183820152602001612b2d565b838111156106245750506000910152565b6001600160a01b03811681146106f657600080fd5b80151581146106f657600080fd5b6001600160701b03811681146106f657600080fdfea264697066735822122060499aefed9a3af369e73987436750233400ef89a744307867f340ffbce22aa864736f6c63430006060033