0x608060405234801561000f575f5ffd5b505f60405161001d90610106565b604051809103905ff080158015610036573d5f5f3e3d5ffd5b50604051633201399760e01b815273d1fac4f51457e4a6d35bdc7311718e5d6de92bb96004820152734200000000000000000000000000000000000006602482015273bcd27a437ebe92555cee6b5bbeddac639a1b6fcb60448201526201995f19606482015262018a87196084820152695f4a8c8375d15540000060a48201525f60c48201529091506001600160a01b0382169063320139979060e4015f604051808303815f87803b1580156100ea575f5ffd5b505af11580156100fc573d5f5f3e3d5ffd5b5050505050610113565b6122ac8061015d83390190565b603e8061011f5f395ff3fe60806040525f5ffdfea26469706673582212203553119197b175c406376c18661034ddaf79355164b7ff56f6fb5763219a589f64736f6c634300081c00336080604052600180546001600160a01b031990811673bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb1790915560038054821673d79ef386f26e40b5e60e4aeb324f2678f6ebbf49179055600480549091167351b8f730f8bf77236e6040cc503a560b3c52e12c1790553480156074575f5ffd5b5061222a806100825f395ff3fe608060405260043610610041575f3560e01c806310d1e85c1461004c57806331f570721461006d578063320139971461008c578063fa461e33146100ab575f5ffd5b3661004857005b5f5ffd5b348015610057575f5ffd5b5061006b610066366004611c3d565b6100ca565b005b348015610078575f5ffd5b5061006b610087366004611c9c565b6106b3565b348015610097575f5ffd5b5061006b6100a6366004611cfb565b61079f565b3480156100b6575f5ffd5b5061006b6100c5366004611d83565b6108f4565b6100d2610aa6565b5f818060200190518101906100e79190611dff565b5050925050505f815f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610133573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101579190611ea8565b5f546001600160a01b039081169116146101f057836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101cb9190611ea8565b5f6101eb600173fffd8963efd1fc6a506488495d951d5263988d26611ede565b610261565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102509190611ea8565b60016102616401000276a382611f03565b9250925092505f60035f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b81526004016020604051808303815f875af11580156102b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102dd9190611ea8565b90506102e887610b3e565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561032c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103509190611f22565b90505f6127106103628c612721611f39565b61036c9190611f64565b90505f81831061037e57506001610492565b506040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156103c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e99190611f22565b6103f39084611f77565b604080516001600160a01b038c1660208083018290528351808403909101815291830190925291925063128acb08308a61042c86611f8a565b8b866040518663ffffffff1660e01b815260040161044e959493929190611fe7565b60408051808303815f875af1158015610469573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048d919061202c565b505050505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b5050505080801561055f57506040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610539573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055d9190611f22565b115b156106a457604080516001600160a01b038a1660208201525f91016040516020818303038152906040529050866105a5576105a06401000276a36001611f03565b6105c4565b6105c4600173fffd8963efd1fc6a506488495d951d5263988d26611ede565b6040516370a0823160e01b815230600482018190529197506001600160a01b03808c169263128acb089290918b1591908d16906370a0823190602401602060405180830381865afa15801561061b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f9190611f22565b8a866040518663ffffffff1660e01b8152600401610661959493929190611fe7565b60408051808303815f875af115801561067c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a0919061202c565b5050505b50505050505050505050505050565b6106bb610aa6565b5f818060200190518101906106d09190611dff565b60035460405163022c0d9f60e01b81529196506001600160a01b0316945063022c0d9f935061070b92508591505f903090889060040161204e565b5f604051808303815f87803b158015610722575f5ffd5b505af1158015610734573d5f5f3e3d5ffd5b50505f5460015460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116925063095ea7b391506044015f604051808303815f87803b158015610784575f5ffd5b505af1158015610796573d5f5f3e3d5ffd5b50505050505050565b6107a7610aa6565b5f80546001600160a01b0319166001600160a01b038881169182178355604080516060810182528983168152600289810b602083015288900b818301526001805492516370a0823160e01b81529290931660048301529392906370a0823190602401602060405180830381865afa158015610824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108489190611f22565b6108529190611f77565b90505f898984868860405160200161086e959493929190612084565b60408051601f198184030181529082905260015463701195a160e11b83529092506001600160a01b03169063e0232b42906108b1908c90869086906004016120e1565b5f604051808303815f87803b1580156108c8575f5ffd5b505af11580156108da573d5f5f3e3d5ffd5b505050506108e88989611441565b50505050505050505050565b6108fc610aa6565b5f61090982840184612110565b90505f8513156109d757806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190611ea8565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201889052919091169063a9059cbb906044015f604051808303815f87803b1580156109bc575f5ffd5b505af11580156109ce573d5f5f3e3d5ffd5b50505050610a9f565b5f841315610a9f57806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f9190611ea8565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201879052919091169063a9059cbb906044015f604051808303815f87803b158015610a88575f5ffd5b505af1158015610a9a573d5f5f3e3d5ffd5b505050505b5050505050565b6040516bffffffffffffffffffffffff193260601b166020820152603401604051602081830303815290604052805190602001207fe0444f9cc38807816e33c5cc67f2cd94c98530099448cbbb341bd55438f930835f1b14610b3c5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9027bbb732b960b11b60448201526064015b60405180910390fd5b565b5f5f5f5f5f85806020019051810190610b579190611dff565b945094509450945094505f835f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcb9190611ea8565b6001600160a01b0316886001600160a01b031614610c6857836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c439190611ea8565b5f610c63600173fffd8963efd1fc6a506488495d951d5263988d26611ede565b610cd9565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc89190611ea8565b6001610cd96401000276a382611f03565b9250925092508515610e0f57604080516001600160a01b03861660208201525f9101604051602081830303815290604052905082610d2357610d1e8860400151611743565b610d30565b610d308860200151611743565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb089290918791908e16906370a0823190602401602060405180830381865afa158015610d86573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa9190611f22565b86866040518663ffffffff1660e01b8152600401610dcc959493929190611fe7565b60408051808303815f875af1158015610de7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0b919061202c565b5050505b5f6040518060e00160405280898152602001866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e819190611ea8565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610ec5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee99190611f22565b8152602001866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4e9190611ea8565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb69190611f22565b81525f6020820181905260408083018290524260608401523060809093019290925254905163095ea7b360e01b81526001600160a01b038d811660048301525f19602483015292935091169063095ea7b3906044015f604051808303815f87803b158015611022575f5ffd5b505af1158015611034573d5f5f3e3d5ffd5b505060405163095ea7b360e01b81526001600160a01b038d811660048301525f1960248301528716925063095ea7b391506044015f604051808303815f87803b15801561107f575f5ffd5b505af1158015611091573d5f5f3e3d5ffd5b50506040805163b3165aaf60e01b8152845180516001600160a01b039081166004840152602080830151600290810b60248601529285015190920b6044840152908601516064830152918501516084820152606085015160a4820152608085015160c482015260a085015160e482015260c085015182166101048201525f9350908d16915063b3165aaf90610124016080604051808303815f875af115801561113c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611160919061212b565b505060405163227efac360e01b8152919250506001600160a01b038c169063227efac390611192908c9060040161217b565b5f604051808303815f87803b1580156111a9575f5ffd5b505af11580156111bb573d5f5f3e3d5ffd5b50506040805160c0810182528c81523060208083019182528284018781525f60608501818152608086019182524260a08701908152875163d59bd26360e01b8152875180516001600160a01b03908116600484015296810151600290810b602484015299015190980b604489015294518416606488015291516084870152905160a48601525160c4850152905160e48401529093508e16915063d59bd26390610104015f604051808303815f87803b158015611275575f5ffd5b505af1158015611287573d5f5f3e3d5ffd5b5050505050505085801561130057506040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe9190611f22565b115b156108e857604080516001600160a01b03861660208201525f9101604051602081830303815290604052905082611346576113416401000276a36001611f03565b611365565b611365600173fffd8963efd1fc6a506488495d951d5263988d26611ede565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb08929091871591908916906370a0823190602401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e09190611f22565b86866040518663ffffffff1660e01b8152600401611402959493929190611fe7565b60408051808303815f875af115801561141d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a4919061202c565b5f5f836001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611489573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ad9190611ea8565b6001600160a01b03161461152157826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151b9190611ea8565b5f611584565b826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115819190611ea8565b60015b604080516001600160a01b03871660208201529294509092505f910160408051601f19818403018152908290526370a0823160e01b825230600483015291505f906001600160a01b0385169063a9059cbb90329083906370a0823190602401602060405180830381865afa1580156115fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116229190611f22565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611665575f5ffd5b505af1158015611677573d5f5f3e3d5ffd5b50505f546040516370a0823160e01b81523060048201526001600160a01b03909116925063a9059cbb9150329083906370a0823190602401602060405180830381865afa1580156116ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ee9190611f22565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611731575f5ffd5b505af11580156108e8573d5f5f3e3d5ffd5b5f5f5f8360020b12611758578260020b611765565b8260020b61176590611f8a565b9050611774620d89e7196121ae565b62ffffff168111156117ac5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610b33565b5f816001165f036117c157600160801b6117d3565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561181257608061180d826ffff97272373d413259a46990580e213a611f39565b901c90505b600482161561183c576080611837826ffff2e50f5f656932ef12357cf3c7fdcc611f39565b901c90505b6008821615611866576080611861826fffe5caca7e10e4e61c3624eaa0941cd0611f39565b901c90505b601082161561189057608061188b826fffcb9843d60f6159c9db58835c926644611f39565b901c90505b60208216156118ba5760806118b5826fff973b41fa98c081472e6896dfb254c0611f39565b901c90505b60408216156118e45760806118df826fff2ea16466c96a3843ec78b326b52861611f39565b901c90505b608082161561190e576080611909826ffe5dee046a99a2a811c461f1969c3053611f39565b901c90505b610100821615611939576080611934826ffcbe86c7900a88aedcffc83b479aa3a4611f39565b901c90505b61020082161561196457608061195f826ff987a7253ac413176f2b074cf7815e54611f39565b901c90505b61040082161561198f57608061198a826ff3392b0822b70005940c7a398e4b70f3611f39565b901c90505b6108008216156119ba5760806119b5826fe7159475a2c29b7443b29c7fa6e889d9611f39565b901c90505b6110008216156119e55760806119e0826fd097f3bdfd2022b8845ad8f792aa5825611f39565b901c90505b612000821615611a10576080611a0b826fa9f746462d870fdf8a65dc1f90e061e5611f39565b901c90505b614000821615611a3b576080611a36826f70d869a156d2a1b890bb3df62baf32f7611f39565b901c90505b618000821615611a66576080611a61826f31be135f97d08fd981231505542fcfa6611f39565b901c90505b62010000821615611a92576080611a8d826f09aa508b5b7a84e1c677de54f3e99bc9611f39565b901c90505b62020000821615611abd576080611ab8826e5d6af8dedb81196699c329225ee604611f39565b901c90505b62040000821615611ae7576080611ae2826d2216e584f5fa1ea926041bedfe98611f39565b901c90505b62080000821615611b0f576080611b0a826b048a170391f7dc42444e8fa2611f39565b901c90505b5f8460020b1315611b2857611b25815f19611f64565b90505b611b37640100000000826121ce565b15611b43576001611b45565b5f5b611b569060ff16602083901c6121e1565b949350505050565b6001600160a01b0381168114611b72575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715611bac57611bac611b75565b60405290565b5f82601f830112611bc1575f5ffd5b813567ffffffffffffffff811115611bdb57611bdb611b75565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611c0a57611c0a611b75565b604052818152838201602001851015611c21575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f60808587031215611c50575f5ffd5b8435611c5b81611b5e565b93506020850135925060408501359150606085013567ffffffffffffffff811115611c84575f5ffd5b611c9087828801611bb2565b91505092959194509250565b5f5f60408385031215611cad575f5ffd5b82359150602083013567ffffffffffffffff811115611cca575f5ffd5b611cd685828601611bb2565b9150509250929050565b8060020b8114611b72575f5ffd5b8015158114611b72575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611d11575f5ffd5b8735611d1c81611b5e565b96506020880135611d2c81611b5e565b95506040880135611d3c81611b5e565b94506060880135611d4c81611ce0565b93506080880135611d5c81611ce0565b925060a0880135915060c0880135611d7381611cee565b8091505092959891949750929550565b5f5f5f5f60608587031215611d96575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115611dba575f5ffd5b8501601f81018713611dca575f5ffd5b803567ffffffffffffffff811115611de0575f5ffd5b876020828401011115611df1575f5ffd5b949793965060200194505050565b5f5f5f5f5f85870360e0811215611e14575f5ffd5b8651611e1f81611b5e565b6020880151909650611e3081611b5e565b94506060603f1982011215611e43575f5ffd5b50611e4c611b89565b6040870151611e5a81611b5e565b81526060870151611e6a81611ce0565b60208201526080870151611e7d81611ce0565b604082015260a0870151909350611e9381611cee565b60c09690960151949793965091949392915050565b5f60208284031215611eb8575f5ffd5b8151611ec381611b5e565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b038281168282160390811115611efd57611efd611eca565b92915050565b6001600160a01b038181168382160190811115611efd57611efd611eca565b5f60208284031215611f32575f5ffd5b5051919050565b8082028115828204841417611efd57611efd611eca565b634e487b7160e01b5f52601260045260245ffd5b5f82611f7257611f72611f50565b500490565b81810381811115611efd57611efd611eca565b5f600160ff1b8201611f9e57611f9e611eca565b505f0390565b5f81518084525f5b81811015611fc857602081850181015186830182015201611fac565b505f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061202190830184611fa4565b979650505050505050565b5f5f6040838503121561203d575f5ffd5b505080516020909101519092909150565b84815283602082015260018060a01b0383166040820152608060608201525f61207a6080830184611fa4565b9695505050505050565b6001600160a01b0386811682528516602082015260e081016120ce604083018660018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b92151560a082015260c001529392505050565b60018060a01b0384168152826020820152606060408201525f6121076060830184611fa4565b95945050505050565b5f60208284031215612120575f5ffd5b8135611ec381611b5e565b5f5f5f5f6080858703121561213e575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612165575f5ffd5b6040860151606090960151949790965092505050565b60608101611efd828460018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b5f8160020b627fffff1981036121c6576121c6611eca565b5f0392915050565b5f826121dc576121dc611f50565b500690565b80820180821115611efd57611efd611eca56fea2646970667358221220c11ca854fd0e0846eadad7b700d149e23177fbacc74e49cd16b47a1c2fb910fb64736f6c634300081c0033