0x608060405234801561000f575f5ffd5b505f60405161001d90610103565b604051809103905ff080158015610036573d5f5f3e3d5ffd5b50604051633201399760e01b815273dc53487e2a6ef468260bc938f645f84caaccac6f6004820152734200000000000000000000000000000000000006602482015273c715096eecc3f4a0fdbff055a3db2926adc83244604482015261030260648201526103e860848201526a013da329b633647180000060a48201525f60c48201529091506001600160a01b0382169063320139979060e4015f604051808303815f87803b1580156100e7575f5ffd5b505af11580156100f9573d5f5f3e3d5ffd5b5050505050610110565b6126888061015a83390190565b603e8061011c5f395ff3fe60806040525f5ffdfea2646970667358221220000c1caf1c38e3314491868637369429713816536a6f44e395103795c6699a6b64736f6c634300081c00336080604052600180546001600160a01b031990811673bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb1790915560038054821673d79ef386f26e40b5e60e4aeb324f2678f6ebbf49179055600480549091167351b8f730f8bf77236e6040cc503a560b3c52e12c1790553480156074575f5ffd5b50612606806100825f395ff3fe608060405260043610610041575f3560e01c806310d1e85c1461004c57806331f570721461006d578063320139971461008c578063fa461e33146100ab575f5ffd5b3661004857005b5f5ffd5b348015610057575f5ffd5b5061006b61006636600461204f565b6100ca565b005b348015610078575f5ffd5b5061006b6100873660046120ae565b6106b3565b348015610097575f5ffd5b5061006b6100a636600461210d565b610958565b3480156100b6575f5ffd5b5061006b6100c5366004612195565b610aad565b6100d2610c5f565b5f818060200190518101906100e79190612211565b5050925050505f815f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610133573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015791906122ba565b5f546001600160a01b039081169116146101f057836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101cb91906122ba565b5f6101eb600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b610261565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025091906122ba565b60016102616401000276a382612315565b9250925092505f60035f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b81526004016020604051808303815f875af11580156102b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102dd91906122ba565b90506102e887610cf7565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561032c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103509190612334565b90505f6127106103628c61272161234b565b61036c9190612376565b90505f81831061037e57506001610492565b506040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156103c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e99190612334565b6103f39084612389565b604080516001600160a01b038c1660208083018290528351808403909101815291830190925291925063128acb08308a61042c8661239c565b8b866040518663ffffffff1660e01b815260040161044e9594939291906123f9565b60408051808303815f875af1158015610469573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048d919061243e565b505050505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b5050505080801561055f57506040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610539573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055d9190612334565b115b156106a457604080516001600160a01b038a1660208201525f91016040516020818303038152906040529050866105a5576105a06401000276a36001612315565b6105c4565b6105c4600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b6040516370a0823160e01b815230600482018190529197506001600160a01b03808c169263128acb089290918b1591908d16906370a0823190602401602060405180830381865afa15801561061b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f9190612334565b8a866040518663ffffffff1660e01b81526004016106619594939291906123f9565b60408051808303815f875af115801561067c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a0919061243e565b5050505b50505050505050505050505050565b6106bb610c5f565b5f5f828060200190518101906106d19190612211565b945050935050505f825f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074291906122ba565b5f546001600160a01b039081169116146107db57836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610792573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b691906122ba565b5f6107d6600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b61084c565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610817573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083b91906122ba565b600161084c6401000276a382612315565b9250925092506002545f0361094557600160025f82825461086d9190612460565b9091555050600180546040516370a0823160e01b81526001600160a01b03918216600482018190529263e0232b42928792908316906370a0823190602401602060405180830381865afa1580156108c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ea9190612334565b6108f49190612389565b8a6040518463ffffffff1660e01b815260040161091393929190612473565b5f604051808303815f87803b15801561092a575f5ffd5b505af115801561093c573d5f5f3e3d5ffd5b5050505061094e565b61094e87610cf7565b5050505050505050565b610960610c5f565b5f80546001600160a01b0319166001600160a01b038881169182178355604080516060810182528983168152600289810b602083015288900b818301526001805492516370a0823160e01b81529290931660048301529392906370a0823190602401602060405180830381865afa1580156109dd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a019190612334565b610a0b9190612389565b90505f8989848688604051602001610a279594939291906124a2565b60408051601f198184030181529082905260015463701195a160e11b83529092506001600160a01b03169063e0232b4290610a6a908c9086908690600401612473565b5f604051808303815f87803b158015610a81575f5ffd5b505af1158015610a93573d5f5f3e3d5ffd5b50505050610aa189896116cd565b50505050505050505050565b610ab5610c5f565b5f610ac2828401846124ff565b90505f851315610b9057806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c91906122ba565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201889052919091169063a9059cbb906044015f604051808303815f87803b158015610b75575f5ffd5b505af1158015610b87573d5f5f3e3d5ffd5b50505050610c58565b5f841315610c5857806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf891906122ba565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201879052919091169063a9059cbb906044015f604051808303815f87803b158015610c41575f5ffd5b505af1158015610c53573d5f5f3e3d5ffd5b505050505b5050505050565b6040516bffffffffffffffffffffffff193260601b166020820152603401604051602081830303815290604052805190602001207fbf89d019dae0b164264bf7f500fed2fca983f2e1c52b418957486bcfeb0b307b5f1b14610cf55760405162461bcd60e51b815260206004820152600a60248201526927b7363c9027bbb732b960b11b60448201526064015b60405180910390fd5b565b5f5f5f5f5f85806020019051810190610d109190612211565b945094509450945094505f835f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8491906122ba565b6001600160a01b0316886001600160a01b031614610e2157836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfc91906122ba565b5f610e1c600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b610e92565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8191906122ba565b6001610e926401000276a382612315565b9250925092508515610fc857604080516001600160a01b03861660208201525f9101604051602081830303815290604052905082610edc57610ed78860400151611b55565b610ee9565b610ee98860200151611b55565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb089290918791908e16906370a0823190602401602060405180830381865afa158015610f3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f639190612334565b86866040518663ffffffff1660e01b8152600401610f859594939291906123f9565b60408051808303815f875af1158015610fa0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc4919061243e565b5050505b5f6040518060e00160405280898152602001866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a91906122ba565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561107e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a29190612334565b8152602001866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110791906122ba565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561114b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116f9190612334565b81525f6020820181905260408083018290524260608401523060809093019290925254905163095ea7b360e01b81526001600160a01b038d811660048301525f19602483015292935091169063095ea7b3906044015f604051808303815f87803b1580156111db575f5ffd5b505af11580156111ed573d5f5f3e3d5ffd5b505060405163095ea7b360e01b81526001600160a01b038d811660048301525f1960248301528716925063095ea7b391506044015f604051808303815f87803b158015611238575f5ffd5b505af115801561124a573d5f5f3e3d5ffd5b50506040805163b3165aaf60e01b8152845180516001600160a01b039081166004840152602080830151600290810b60248601529285015190920b6044840152908601516064830152918501516084820152606085015160a4820152608085015160c482015260a085015160e482015260c085015182166101048201525f9350908d16915063b3165aaf90610124016080604051808303815f875af11580156112f5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611319919061251a565b505060405163227efac360e01b8152919250506001600160a01b038c169063227efac39061134b908c9060040161256a565b5f604051808303815f87803b158015611362575f5ffd5b505af1158015611374573d5f5f3e3d5ffd5b50506040805160c0810182528c81523060208083019182528284018781525f60608501818152608086019182524260a08701908152875163d59bd26360e01b8152875180516001600160a01b03908116600484015296810151600290810b602484015299015190980b604489015294518416606488015291516084870152905160a48601525160c4850152905160e48401529093508e16915063d59bd26390610104015f604051808303815f87803b15801561142e575f5ffd5b505af1158015611440573d5f5f3e3d5ffd5b505050505050508580156114b957506040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611493573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b79190612334565b115b156115fe57604080516001600160a01b03861660208201525f91016040516020818303038152906040529050826114ff576114fa6401000276a36001612315565b61151e565b61151e600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb08929091871591908916906370a0823190602401602060405180830381865afa158015611575573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115999190612334565b86866040518663ffffffff1660e01b81526004016115bb9594939291906123f9565b60408051808303815f875af11580156115d6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fa919061243e565b5050505b5f5460015460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044015f604051808303815f87803b15801561164a575f5ffd5b505af115801561165c573d5f5f3e3d5ffd5b505060015460405163095ea7b360e01b81526001600160a01b0391821660048201525f196024820152908616925063095ea7b391506044015f604051808303815f87803b1580156116ab575f5ffd5b505af11580156116bd573d5f5f3e3d5ffd5b5050505050505050505050505050565b5f5f836001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611715573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173991906122ba565b6001600160a01b0316146117ad57826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611783573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a791906122ba565b5f611810565b826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180d91906122ba565b60015b604080516001600160a01b03871660208201529294509092505f910160408051601f19818403018152908290526370a0823160e01b825230600483015291505f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015611882573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a69190612334565b11156119c457826118c6576118c16401000276a36001612315565b6118e5565b6118e5600173fffd8963efd1fc6a506488495d951d5263988d266122f0565b6040516370a0823160e01b815230600482018190529192506001600160a01b038088169263128acb08929091871591908916906370a0823190602401602060405180830381865afa15801561193c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119609190612334565b85876040518663ffffffff1660e01b81526004016119829594939291906123f9565b60408051808303815f875af115801561199d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c1919061243e565b50505b6040516370a0823160e01b81523060048201526001600160a01b0385169063a9059cbb90329083906370a0823190602401602060405180830381865afa158015611a10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a349190612334565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611a77575f5ffd5b505af1158015611a89573d5f5f3e3d5ffd5b50505f546040516370a0823160e01b81523060048201526001600160a01b03909116925063a9059cbb9150329083906370a0823190602401602060405180830381865afa158015611adc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b009190612334565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611b43575f5ffd5b505af1158015610aa1573d5f5f3e3d5ffd5b5f5f5f8360020b12611b6a578260020b611b77565b8260020b611b779061239c565b9050611b86620d89e71961259d565b62ffffff16811115611bbe5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610cec565b5f816001165f03611bd357600160801b611be5565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611c24576080611c1f826ffff97272373d413259a46990580e213a61234b565b901c90505b6004821615611c4e576080611c49826ffff2e50f5f656932ef12357cf3c7fdcc61234b565b901c90505b6008821615611c78576080611c73826fffe5caca7e10e4e61c3624eaa0941cd061234b565b901c90505b6010821615611ca2576080611c9d826fffcb9843d60f6159c9db58835c92664461234b565b901c90505b6020821615611ccc576080611cc7826fff973b41fa98c081472e6896dfb254c061234b565b901c90505b6040821615611cf6576080611cf1826fff2ea16466c96a3843ec78b326b5286161234b565b901c90505b6080821615611d20576080611d1b826ffe5dee046a99a2a811c461f1969c305361234b565b901c90505b610100821615611d4b576080611d46826ffcbe86c7900a88aedcffc83b479aa3a461234b565b901c90505b610200821615611d76576080611d71826ff987a7253ac413176f2b074cf7815e5461234b565b901c90505b610400821615611da1576080611d9c826ff3392b0822b70005940c7a398e4b70f361234b565b901c90505b610800821615611dcc576080611dc7826fe7159475a2c29b7443b29c7fa6e889d961234b565b901c90505b611000821615611df7576080611df2826fd097f3bdfd2022b8845ad8f792aa582561234b565b901c90505b612000821615611e22576080611e1d826fa9f746462d870fdf8a65dc1f90e061e561234b565b901c90505b614000821615611e4d576080611e48826f70d869a156d2a1b890bb3df62baf32f761234b565b901c90505b618000821615611e78576080611e73826f31be135f97d08fd981231505542fcfa661234b565b901c90505b62010000821615611ea4576080611e9f826f09aa508b5b7a84e1c677de54f3e99bc961234b565b901c90505b62020000821615611ecf576080611eca826e5d6af8dedb81196699c329225ee60461234b565b901c90505b62040000821615611ef9576080611ef4826d2216e584f5fa1ea926041bedfe9861234b565b901c90505b62080000821615611f21576080611f1c826b048a170391f7dc42444e8fa261234b565b901c90505b5f8460020b1315611f3a57611f37815f19612376565b90505b611f49640100000000826125bd565b15611f55576001611f57565b5f5b611f689060ff16602083901c612460565b949350505050565b6001600160a01b0381168114611f84575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715611fbe57611fbe611f87565b60405290565b5f82601f830112611fd3575f5ffd5b813567ffffffffffffffff811115611fed57611fed611f87565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561201c5761201c611f87565b604052818152838201602001851015612033575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f60808587031215612062575f5ffd5b843561206d81611f70565b93506020850135925060408501359150606085013567ffffffffffffffff811115612096575f5ffd5b6120a287828801611fc4565b91505092959194509250565b5f5f604083850312156120bf575f5ffd5b82359150602083013567ffffffffffffffff8111156120dc575f5ffd5b6120e885828601611fc4565b9150509250929050565b8060020b8114611f84575f5ffd5b8015158114611f84575f5ffd5b5f5f5f5f5f5f5f60e0888a031215612123575f5ffd5b873561212e81611f70565b9650602088013561213e81611f70565b9550604088013561214e81611f70565b9450606088013561215e816120f2565b9350608088013561216e816120f2565b925060a0880135915060c088013561218581612100565b8091505092959891949750929550565b5f5f5f5f606085870312156121a8575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156121cc575f5ffd5b8501601f810187136121dc575f5ffd5b803567ffffffffffffffff8111156121f2575f5ffd5b876020828401011115612203575f5ffd5b949793965060200194505050565b5f5f5f5f5f85870360e0811215612226575f5ffd5b865161223181611f70565b602088015190965061224281611f70565b94506060603f1982011215612255575f5ffd5b5061225e611f9b565b604087015161226c81611f70565b8152606087015161227c816120f2565b6020820152608087015161228f816120f2565b604082015260a08701519093506122a581612100565b60c09690960151949793965091949392915050565b5f602082840312156122ca575f5ffd5b81516122d581611f70565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b03828116828216039081111561230f5761230f6122dc565b92915050565b6001600160a01b03818116838216019081111561230f5761230f6122dc565b5f60208284031215612344575f5ffd5b5051919050565b808202811582820484141761230f5761230f6122dc565b634e487b7160e01b5f52601260045260245ffd5b5f8261238457612384612362565b500490565b8181038181111561230f5761230f6122dc565b5f600160ff1b82016123b0576123b06122dc565b505f0390565b5f81518084525f5b818110156123da576020818501810151868301820152016123be565b505f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f90612433908301846123b6565b979650505050505050565b5f5f6040838503121561244f575f5ffd5b505080516020909101519092909150565b8082018082111561230f5761230f6122dc565b60018060a01b0384168152826020820152606060408201525f61249960608301846123b6565b95945050505050565b6001600160a01b0386811682528516602082015260e081016124ec604083018660018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b92151560a082015260c001529392505050565b5f6020828403121561250f575f5ffd5b81356122d581611f70565b5f5f5f5f6080858703121561252d575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612554575f5ffd5b6040860151606090960151949790965092505050565b6060810161230f828460018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b5f8160020b627fffff1981036125b5576125b56122dc565b5f0392915050565b5f826125cb576125cb612362565b50069056fea2646970667358221220633d6b71051554cdb5f15947afc6dace40265a2e04b3932248ed46eb930a32fc64736f6c634300081c0033