0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610407578063d505accf1461041a578063dd62ed3e1461042d578063fff6cae91461045857600080fd5b8063ba9a7a56146103d8578063bc25cf77146103e1578063c45a0155146103f457600080fd5b80637ecebe00116100d35780637ecebe001461035957806389afcb441461037957806395d89b41146103a1578063a9059cbb146103c557600080fd5b80636a6278421461031d57806370a08231146103305780637464fc3d1461035057600080fd5b806323b872dd116101665780633644e515116101405780633644e515146102ef578063485cc955146102f85780635909c0d51461030b5780635a3d54931461031457600080fd5b806323b872dd1461029b57806330adf81f146102ae578063313ce567146102d557600080fd5b8063022c0d9f146101ae57806306fdde03146101c35780630902f1ac14610202578063095ea7b3146102365780630dfe16811461025957806318160ddd14610284575b600080fd5b6101c16101bc366004611fbb565b610460565b005b6101ec6040518060400160405280600a8152602001694b4149444558204c507360b01b81525081565b6040516101f991906120b4565b60405180910390f35b61020a610977565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101f9565b610249610244366004611f58565b6109a1565b60405190151581526020016101f9565b60065461026c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f9565b61028d60005481565b6040519081526020016101f9565b6102496102a9366004611ea3565b6109b8565b61028d7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102dd601281565b60405160ff90911681526020016101f9565b61028d60035481565b6101c1610306366004611e6b565b610a4c565b61028d60095481565b61028d600a5481565b61028d61032b366004611e33565b610ac8565b61028d61033e366004611e33565b60016020526000908152604090205481565b61028d600b5481565b61028d610367366004611e33565b60046020526000908152604090205481565b61038c610387366004611e33565b610da8565b604080519283526020830191909152016101f9565b6101ec6040518060400160405280600581526020016404b44584c560dc1b81525081565b6102496103d3366004611f58565b611147565b61028d6103e881565b6101c16103ef366004611e33565b611154565b60055461026c906001600160a01b031681565b60075461026c906001600160a01b031681565b6101c1610428366004611ee3565b611277565b61028d61043b366004611e6b565b600260209081526000928352604080842090915290825290205481565b6101c1611488565b600c5460011461048b5760405162461bcd60e51b8152600401610482906120e7565b60405180910390fd5b6000600c558415158061049e5750600084115b6104f55760405162461bcd60e51b815260206004820152602260248201527f4b41494445583a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b6064820152608401610482565b600080610500610977565b5091509150816001600160701b0316871080156105255750806001600160701b031686105b6105715760405162461bcd60e51b815260206004820152601e60248201527f4b41494445583a20494e53554646494349454e545f4c495155494449545900006044820152606401610482565b60065460075460009182916001600160a01b039182169190811690891682148015906105af5750806001600160a01b0316896001600160a01b031614155b6105f05760405162461bcd60e51b81526020600482015260126024820152714b41494445583a20494e56414c49445f544f60701b6044820152606401610482565b8a1561060157610601828a8d6115ca565b891561061257610612818a8c6115ca565b861561067f576040516303468d3b60e51b81526001600160a01b038a16906368d1a7609061064c9033908f908f908e908e90600401612068565b600060405180830381600087803b15801561066657600080fd5b505af115801561067a573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611fa3565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b15801561073857600080fd5b505afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611fa3565b92505050600089856001600160701b031661078b91906121af565b83116107985760006107b5565b6107ab8a6001600160701b0387166121af565b6107b590846121af565b905060006107cc8a6001600160701b0387166121af565b83116107d95760006107f6565b6107ec8a6001600160701b0387166121af565b6107f690846121af565b905060008211806108075750600081115b6108615760405162461bcd60e51b815260206004820152602560248201527f4b414944657843616c6c3a20494e53554646494349454e545f494e5055545f416044820152641353d5539560da1b6064820152608401610482565b6000610883610871846003611715565b61087d876103e8611715565b9061177c565b90506000610895610871846003611715565b90506108ba620f42406108b46001600160701b038b8116908b16611715565b90611715565b6108c48383611715565b10156109025760405162461bcd60e51b815260206004820152600d60248201526c4b414944657843616c6c3a204b60981b6044820152606401610482565b5050610910848488886117d2565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b60006109ae3384846119bb565b5060015b92915050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610a37576001600160a01b0384166000908152600260209081526040808320338452909152902054610a12908361177c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610a42848484611a1d565b5060019392505050565b6005546001600160a01b03163314610a9a5760405162461bcd60e51b815260206004820152601160248201527025a0a4a222ac1d102327a92124a22222a760791b6044820152606401610482565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6000600c54600114610aec5760405162461bcd60e51b8152600401610482906120e7565b6000600c81905580610afc610977565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b4957600080fd5b505afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190611fa3565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610bca57600080fd5b505afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c029190611fa3565b90506000610c19836001600160701b03871661177c565b90506000610c30836001600160701b03871661177c565b90506000610c3e8787611ac3565b60005490915080610c7557610c616103e861087d610c5c8787611715565b611c0f565b9850610c7060006103e8611c7f565b610cbc565b610cb96001600160701b038916610c8c8684611715565b610c96919061214d565b6001600160701b038916610caa8685611715565b610cb4919061214d565b611d0e565b98505b60008911610d1a5760405162461bcd60e51b815260206004820152602560248201527f4b41494445583a20494e53554646494349454e545f4c49515549444954595f4d604482015264125395115160da1b6064820152608401610482565b610d248a8a611c7f565b610d3086868a8a6117d2565b8115610d5a57600854610d56906001600160701b0380821691600160701b900416611715565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c54600114610dcd5760405162461bcd60e51b8152600401610482906120e7565b6000600c81905580610ddd610977565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190611fa3565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015610eaf57600080fd5b505afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190611fa3565b30600090815260016020526040812054919250610f048888611ac3565b60005490915080610f158487611715565b610f1f919061214d565b9a5080610f2c8486611715565b610f36919061214d565b995060008b118015610f48575060008a115b610fa25760405162461bcd60e51b815260206004820152602560248201527f4b41494445583a20494e53554646494349454e545f4c49515549444954595f42604482015264155493915160da1b6064820152608401610482565b610fac3084611d26565b610fb7878d8d6115ca565b610fc2868d8c6115ca565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b15801561100157600080fd5b505afa158015611015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110399190611fa3565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b15801561107b57600080fd5b505afa15801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190611fa3565b93506110c185858b8b6117d2565b81156110eb576008546110e7906001600160701b0380821691600160701b900416611715565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b60006109ae338484611a1d565b600c546001146111765760405162461bcd60e51b8152600401610482906120e7565b6000600c556006546007546008546040516370a0823160e01b81523060048201526001600160a01b039384169390921691611220918491869161121b916001600160701b039091169084906370a08231906024015b60206040518083038186803b1580156111e357600080fd5b505afa1580156111f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087d9190611fa3565b6115ca565b6008546040516370a0823160e01b815230600482015261126d918391869161121b91600160701b9091046001600160701b0316906001600160a01b038516906370a08231906024016111cb565b50506001600c5550565b428410156112b95760405162461bcd60e51b815260206004820152600f60248201526e12d0525111560e8811561412549151608a1b6044820152606401610482565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761130c8361221b565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161138592919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156113f0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114265750886001600160a01b0316816001600160a01b0316145b6114725760405162461bcd60e51b815260206004820152601960248201527f4b41494445583a20494e56414c49445f5349474e4154555245000000000000006044820152606401610482565b61147d8989896119bb565b505050505050505050565b600c546001146114aa5760405162461bcd60e51b8152600401610482906120e7565b6000600c556006546040516370a0823160e01b81523060048201526115c3916001600160a01b0316906370a082319060240160206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c9190611fa3565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190611fa3565b6008546001600160701b0380821691600160701b9004166117d2565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291516000928392871691611656919061204c565b6000604051808303816000865af19150503d8060008114611693576040519150601f19603f3d011682016040523d82523d6000602084013e611698565b606091505b50915091508180156116c25750805115806116c25750808060200190518101906116c29190611f83565b61170e5760405162461bcd60e51b815260206004820152601760248201527f4b41494445583a205452414e534645525f4641494c45440000000000000000006044820152606401610482565b5050505050565b60008115806117395750828261172b8183612190565b9250611737908361214d565b145b6109b25760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610482565b60008261178983826121af565b91508111156109b25760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610482565b6001600160701b0384118015906117f057506001600160701b038311155b61182f5760405162461bcd60e51b815260206004820152601060248201526f4b41494445583a204f564552464c4f5760801b6044820152606401610482565b600061184064010000000042612236565b60085490915060009061186090600160e01b900463ffffffff16836121c6565b905060008163ffffffff1611801561188057506001600160701b03841615155b801561189457506001600160701b03831615155b15611923578063ffffffff166118bc856118ad86611db0565b6001600160e01b031690611dc9565b6001600160e01b03166118cf9190612190565b600960008282546118e0919061210f565b909155505063ffffffff81166118f9846118ad87611db0565b6001600160e01b031661190c9190612190565b600a600082825461191d919061210f565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054611a40908261177c565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611a6f9082611dde565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a109085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1457600080fd5b505afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190611e4f565b600b546001600160a01b038216158015945091925090611bfb578015611bf6576000611b87610c5c6001600160701b03888116908816611715565b90506000611b9483611c0f565b905080821115611bf3576000611bb6611bad848461177c565b60005490611715565b90506000611bcf83611bc9866005611715565b90611dde565b90506000611bdd828461214d565b90508015611bef57611bef8782611c7f565b5050505b50505b611c07565b8015611c07576000600b555b505092915050565b60006003821115611c705750806000611c2960028361214d565b611c3490600161210f565b90505b81811015611c6a57905080600281611c4f818661214d565b611c59919061210f565b611c63919061214d565b9050611c37565b50919050565b8115611c7a575060015b919050565b600054611c8c9082611dde565b60009081556001600160a01b038316815260016020526040902054611cb19082611dde565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d029085815260200190565b60405180910390a35050565b6000818310611d1d5781611d1f565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611d49908261177c565b6001600160a01b03831660009081526001602052604081209190915554611d70908261177c565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611d02565b60006109b2600160701b6001600160701b038416612161565b6000611d1f6001600160701b03831684612127565b600082611deb838261210f565b91508110156109b25760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610482565b600060208284031215611e44578081fd5b8135611d1f81612276565b600060208284031215611e60578081fd5b8151611d1f81612276565b60008060408385031215611e7d578081fd5b8235611e8881612276565b91506020830135611e9881612276565b809150509250929050565b600080600060608486031215611eb7578081fd5b8335611ec281612276565b92506020840135611ed281612276565b929592945050506040919091013590565b600080600080600080600060e0888a031215611efd578283fd5b8735611f0881612276565b96506020880135611f1881612276565b95506040880135945060608801359350608088013560ff81168114611f3b578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611f6a578182fd5b8235611f7581612276565b946020939093013593505050565b600060208284031215611f94578081fd5b81518015158114611d1f578182fd5b600060208284031215611fb4578081fd5b5051919050565b600080600080600060808688031215611fd2578081fd5b85359450602086013593506040860135611feb81612276565b9250606086013567ffffffffffffffff80821115612007578283fd5b818801915088601f83011261201a578283fd5b813581811115612028578384fd5b896020828501011115612039578384fd5b9699959850939650602001949392505050565b6000825161205e8184602087016121eb565b9190910192915050565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60208152600082518060208401526120d38160408501602087016121eb565b601f01601f19169190910160400192915050565b6020808252600e908201526d12d0525111560e881313d0d2d15160921b604082015260600190565b600082198211156121225761212261224a565b500190565b60006001600160e01b038381168061214157612141612260565b92169190910492915050565b60008261215c5761215c612260565b500490565b60006001600160e01b03828116848216811515828404821116156121875761218761224a565b02949350505050565b60008160001904831182151516156121aa576121aa61224a565b500290565b6000828210156121c1576121c161224a565b500390565b600063ffffffff838116908316818110156121e3576121e361224a565b039392505050565b60005b838110156122065781810151838201526020016121ee565b83811115612215576000848401525b50505050565b600060001982141561222f5761222f61224a565b5060010190565b60008261224557612245612260565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461228b57600080fd5b5056fea264697066735822122002402f46a09feed7c0fcabe7f48a37e50b8ac31b1b916da406fbf1c1c05368c864736f6c63430008040033