60806040526001600c5534801561001557600080fd5b50604080518082018252601181527021b937bbb22232bc102628102a37b5b2b760791b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527ff3ea2cd7fcf43cac11c3a4bb4cdb72a680df60f4e612e55b04107e5db423d054818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556125668061010f6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063b9209e33116100a2578063d21220a711610071578063d21220a714610468578063d505accf1461047b578063dd62ed3e1461048e578063fff6cae9146104b957600080fd5b8063b9209e3314610416578063ba9a7a5614610439578063bc25cf7714610442578063c45a01551461045557600080fd5b806389afcb44116100de57806389afcb44146103a65780638d14f0fc146103ce57806395d89b41146103e1578063a9059cbb1461040357600080fd5b806370a082311461035d5780637464fc3d1461037d5780637ecebe001461038657600080fd5b806330adf81f11610171578063485cc9551161014b578063485cc955146103255780635909c0d5146103385780635a3d5493146103415780636a6278421461034a57600080fd5b806330adf81f146102db578063313ce567146103025780633644e5151461031c57600080fd5b8063095ea7b3116101ad578063095ea7b3146102635780630dfe16811461028657806318160ddd146102b157806323b872dd146102c857600080fd5b8063022c0d9f146101d457806306fdde03146101e95780630902f1ac1461022f575b600080fd5b6101e76101e2366004612063565b6104c1565b005b6102196040518060400160405280601181526020017021b937bbb22232bc102628102a37b5b2b760791b81525081565b6040516102269190612129565b60405180910390f35b610237610a14565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610226565b61027661027136600461215c565b610a3e565b6040519015158152602001610226565b600654610299906001600160a01b031681565b6040516001600160a01b039091168152602001610226565b6102ba60005481565b604051908152602001610226565b6102766102d6366004612188565b610a55565b6102ba7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61030a601281565b60405160ff9091168152602001610226565b6102ba60035481565b6101e76103333660046121c9565b610ae9565b6102ba60095481565b6102ba600a5481565b6102ba610358366004612202565b610b68565b6102ba61036b366004612202565b60016020526000908152604090205481565b6102ba600b5481565b6102ba610394366004612202565b60046020526000908152604090205481565b6103b96103b4366004612202565b610e79565b60408051928352602083019190915201610226565b6101e76103dc36600461222d565b611249565b610219604051806040016040528060038152602001620434c560ec1b81525081565b61027661041136600461215c565b6112fd565b610276610424366004612202565b600d6020526000908152604090205460ff1681565b6102ba6103e881565b6101e7610450366004612202565b61130a565b600554610299906001600160a01b031681565b600754610299906001600160a01b031681565b6101e761048936600461225b565b61145b565b6102ba61049c3660046121c9565b600260209081526000928352604080842090915290825290205481565b6101e761166f565b600c546001146104ec5760405162461bcd60e51b81526004016104e3906122d2565b60405180910390fd5b6000600c819055338152600d602052604090205460ff1661051f5760405162461bcd60e51b81526004016104e3906122fd565b600085118061052e5750600084115b6105885760405162461bcd60e51b815260206004820152602560248201527f556e697377617056323a20494e53554646494349454e545f4f55545055545f416044820152641353d5539560da1b60648201526084016104e3565b600080610593610a14565b5091509150816001600160701b0316871080156105b85750806001600160701b031686105b61060e5760405162461bcd60e51b815260206004820152602160248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152605960f81b60648201526084016104e3565b60065460075460009182916001600160a01b0391821691908116908916821480159061064c5750806001600160a01b0316896001600160a01b031614155b6106905760405162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b60448201526064016104e3565b8a156106a1576106a1828a8d6117df565b89156106b2576106b2818a8c6117df565b861561071f576040516304347a1760e21b81526001600160a01b038a16906310d1e85c906106ec9033908f908f908e908e9060040161233e565b600060405180830381600087803b15801561070657600080fd5b505af115801561071a573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610796919061238a565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b1580156107d857600080fd5b505afa1580156107ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610810919061238a565b92505050600089856001600160701b031661082b91906123b9565b8311610838576000610855565b61084b8a6001600160701b0387166123b9565b61085590846123b9565b9050600061086c8a6001600160701b0387166123b9565b8311610879576000610896565b61088c8a6001600160701b0387166123b9565b61089690846123b9565b905060008211806108a75750600081115b6108ff5760405162461bcd60e51b8152602060048201526024808201527f556e697377617056323a20494e53554646494349454e545f494e5055545f414d60448201526313d5539560e21b60648201526084016104e3565b600061092161090f84600361192a565b61091b876103e861192a565b90611991565b9050600061093361090f84600361192a565b9050610958620f42406109526001600160701b038b8116908b1661192a565b9061192a565b610962838361192a565b101561099f5760405162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b60448201526064016104e3565b50506109ad848488886119e7565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610a4b338484611bd3565b5060015b92915050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610ad4576001600160a01b0384166000908152600260209081526040808320338452909152902054610aaf9083611991565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610adf848484611c35565b5060019392505050565b6005546001600160a01b03163314610b3a5760405162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b60448201526064016104e3565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6000600c54600114610b8c5760405162461bcd60e51b81526004016104e3906122d2565b6000600c819055338152600d602052604090205460ff16610bbf5760405162461bcd60e51b81526004016104e3906122fd565b600080610bca610a14565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610c1757600080fd5b505afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f919061238a565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610c9857600080fd5b505afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd0919061238a565b90506000610ce7836001600160701b038716611991565b90506000610cfe836001600160701b038716611991565b90506000610d0c8787611cdb565b60005490915080610d4357610d2f6103e861091b610d2a878761192a565b611e27565b9850610d3e60006103e8611e97565b610d8a565b610d876001600160701b038916610d5a868461192a565b610d6491906123e6565b6001600160701b038916610d78868561192a565b610d8291906123e6565b611f26565b98505b60008911610deb5760405162461bcd60e51b815260206004820152602860248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152671657d3525395115160c21b60648201526084016104e3565b610df58a8a611e97565b610e0186868a8a6119e7565b8115610e2b57600854610e27906001600160701b0380821691600160701b90041661192a565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c54600114610e9e5760405162461bcd60e51b81526004016104e3906122d2565b6000600c819055338152600d602052604090205460ff16610ed15760405162461bcd60e51b81526004016104e3906122fd565b600080610edc610a14565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f69919061238a565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015610fae57600080fd5b505afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe6919061238a565b306000908152600160205260408120549192506110038888611cdb565b60005490915080611014848761192a565b61101e91906123e6565b9a508061102b848661192a565b61103591906123e6565b995060008b118015611047575060008a115b6110a45760405162461bcd60e51b815260206004820152602860248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152671657d0955493915160c21b60648201526084016104e3565b6110ae3084611f3e565b6110b9878d8d6117df565b6110c4868d8c6117df565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b15801561110357600080fd5b505afa158015611117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113b919061238a565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b15801561117d57600080fd5b505afa158015611191573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b5919061238a565b93506111c385858b8b6119e7565b81156111ed576008546111e9906001600160701b0380821691600160701b90041661192a565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b6005546001600160a01b0316331461129a5760405162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b60448201526064016104e3565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527faa21aa48ad7d0f3ddf4abe27e1a7d1d7689994c9d439a2a067001b660419f92a910160405180910390a15050565b6000610a4b338484611c35565b600c5460011461132c5760405162461bcd60e51b81526004016104e3906122d2565b6000600c819055338152600d602052604090205460ff1661135f5760405162461bcd60e51b81526004016104e3906122fd565b6006546007546008546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161140491849186916113ff916001600160701b039091169084906370a08231906024015b60206040518083038186803b1580156113c757600080fd5b505afa1580156113db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091b919061238a565b6117df565b6008546040516370a0823160e01b815230600482015261145191839186916113ff91600160701b9091046001600160701b0316906001600160a01b038516906370a08231906024016113af565b50506001600c5550565b428410156114a05760405162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b60448201526064016104e3565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876114f3836123fa565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161156c92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156115d7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061160d5750886001600160a01b0316816001600160a01b0316145b6116595760405162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e41545552450000000060448201526064016104e3565b611664898989611bd3565b505050505050505050565b600c546001146116915760405162461bcd60e51b81526004016104e3906122d2565b6000600c819055338152600d602052604090205460ff166116c45760405162461bcd60e51b81526004016104e3906122fd565b6006546040516370a0823160e01b81523060048201526117d8916001600160a01b0316906370a082319060240160206040518083038186803b15801561170957600080fd5b505afa15801561171d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611741919061238a565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561178457600080fd5b505afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061238a565b6008546001600160701b0380821691600160701b9004166119e7565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1790529151600092839287169161186b9190612415565b6000604051808303816000865af19150503d80600081146118a8576040519150601f19603f3d011682016040523d82523d6000602084013e6118ad565b606091505b50915091508180156118d75750805115806118d75750808060200190518101906118d79190612431565b6119235760405162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c454400000000000060448201526064016104e3565b5050505050565b600081158061194e57508282611940818361244e565b925061194c90836123e6565b145b610a4f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016104e3565b60008261199e83826123b9565b9150811115610a4f5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016104e3565b6001600160701b038411801590611a0557506001600160701b038311155b611a475760405162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b60448201526064016104e3565b6000611a586401000000004261246d565b600854909150600090611a7890600160e01b900463ffffffff1683612481565b905060008163ffffffff16118015611a9857506001600160701b03841615155b8015611aac57506001600160701b03831615155b15611b3b578063ffffffff16611ad485611ac586611fc8565b6001600160e01b031690611fe1565b6001600160e01b0316611ae7919061244e565b60096000828254611af891906124a6565b909155505063ffffffff8116611b1184611ac587611fc8565b6001600160e01b0316611b24919061244e565b600a6000828254611b3591906124a6565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054611c589082611991565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611c879082611ff6565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c289085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2c57600080fd5b505afa158015611d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6491906124be565b600b546001600160a01b038216158015945091925090611e13578015611e0e576000611d9f610d2a6001600160701b0388811690881661192a565b90506000611dac83611e27565b905080821115611e0b576000611dce611dc58484611991565b6000549061192a565b90506000611de783611de186600561192a565b90611ff6565b90506000611df582846123e6565b90508015611e0757611e078782611e97565b5050505b50505b611e1f565b8015611e1f576000600b555b505092915050565b60006003821115611e885750806000611e416002836123e6565b611e4c9060016124a6565b90505b81811015611e8257905080600281611e6781866123e6565b611e7191906124a6565b611e7b91906123e6565b9050611e4f565b50919050565b8115611e92575060015b919050565b600054611ea49082611ff6565b60009081556001600160a01b038316815260016020526040902054611ec99082611ff6565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f1a9085815260200190565b60405180910390a35050565b6000818310611f355781611f37565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611f619082611991565b6001600160a01b03831660009081526001602052604081209190915554611f889082611991565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f1a565b6000610a4f600160701b6001600160701b0384166124db565b6000611f376001600160701b0383168461250a565b60008261200383826124a6565b9150811015610a4f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016104e3565b6001600160a01b038116811461206057600080fd5b50565b60008060008060006080868803121561207b57600080fd5b853594506020860135935060408601356120948161204b565b9250606086013567ffffffffffffffff808211156120b157600080fd5b818801915088601f8301126120c557600080fd5b8135818111156120d457600080fd5b8960208285010111156120e657600080fd5b9699959850939650602001949392505050565b60005b838110156121145781810151838201526020016120fc565b83811115612123576000848401525b50505050565b60208152600082518060208401526121488160408501602087016120f9565b601f01601f19169190910160400192915050565b6000806040838503121561216f57600080fd5b823561217a8161204b565b946020939093013593505050565b60008060006060848603121561219d57600080fd5b83356121a88161204b565b925060208401356121b88161204b565b929592945050506040919091013590565b600080604083850312156121dc57600080fd5b82356121e78161204b565b915060208301356121f78161204b565b809150509250929050565b60006020828403121561221457600080fd5b8135611f378161204b565b801515811461206057600080fd5b6000806040838503121561224057600080fd5b823561224b8161204b565b915060208301356121f78161221f565b600080600080600080600060e0888a03121561227657600080fd5b87356122818161204b565b965060208801356122918161204b565b95506040880135945060608801359350608088013560ff811681146122b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b602080825260119082015270155b9a5cddd85c158c8e881313d0d2d151607a1b604082015260600190565b60208082526021908201527f556e697377617056323a2063616c6c6572206973206e6f7420766572696669656040820152601960fa1b606082015260800190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561239c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123cb576123cb6123a3565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826123f5576123f56123d0565b500490565b600060001982141561240e5761240e6123a3565b5060010190565b600082516124278184602087016120f9565b9190910192915050565b60006020828403121561244357600080fd5b8151611f378161221f565b6000816000190483118215151615612468576124686123a3565b500290565b60008261247c5761247c6123d0565b500690565b600063ffffffff8381169083168181101561249e5761249e6123a3565b039392505050565b600082198211156124b9576124b96123a3565b500190565b6000602082840312156124d057600080fd5b8151611f378161204b565b60006001600160e01b0382811684821681151582840482111615612501576125016123a3565b02949350505050565b60006001600160e01b0383811680612524576125246123d0565b9216919091049291505056fea264697066735822122054445152c78bd88a1bed0536fd3f6465142f7b0350e2be3d3b38bbd44b9e48db64736f6c63430008080033