608060405234801561001057600080fd5b50614550806100206000396000f3fe6080604052600436106103295760003560e01c806370a08231116101a5578063bee6348a116100ec578063dfdd9b9a11610095578063f2fde38b1161006f578063f2fde38b1461093c578063f5ca4dfd1461095c578063fcfff16f1461097f578063fe25219a146109a157600080fd5b8063dfdd9b9a146108c9578063e985e9c5146108e0578063f179dca11461092957600080fd5b8063c87b56dd116100c6578063c87b56dd14610852578063d6c5b41414610872578063db31882b146108a957600080fd5b8063bee6348a146107e2578063c23dc68f14610804578063c7d126101461083157600080fd5b806399a2557a1161014e578063b119490e11610128578063b119490e14610782578063b88d4fde146107a2578063be8e43ee146107c257600080fd5b806399a2557a1461072f578063a0712d681461074f578063a22cb4651461076257600080fd5b80638462151c1161017f5780638462151c146106cf5780638da5cb5b146106fc57806395d89b411461071a57600080fd5b806370a082311461067a578063715018a61461069a578063828c12ce146106af57600080fd5b8063355e6b4311610274578063518302271161021d5780636352211e116101f75780636352211e146105f857806364bb106114610618578063672434821461063a5780636c2f5acd1461065a57600080fd5b806351830227146105a1578063595882b3146105c35780635bbb2177146105cb57600080fd5b806342966c681161024e57806342966c6814610528578063453c231014610548578063507e094f1461058357600080fd5b8063355e6b43146104e05780633ccfd60b1461050057806342842e0e1461050857600080fd5b80631012c330116102d65780631d02161d116102b05780631d02161d1461046157806323b872dd146104815780632a55205a146104a157600080fd5b80631012c3301461041557806313faede61461043557806318160ddd1461044c57600080fd5b806306fdde031161030757806306fdde031461039b578063081812fc146103bd578063095ea7b3146103f557600080fd5b806301ffc9a71461032e5780630364d22a14610363578063047fc9aa14610378575b600080fd5b34801561033a57600080fd5b5061034e610349366004613ed7565b6109c1565b60405190151581526020015b60405180910390f35b610376610371366004613fe4565b6109ec565b005b34801561038457600080fd5b5061038d610dea565b60405190815260200161035a565b3480156103a757600080fd5b506103b0610e00565b60405161035a91906142af565b3480156103c957600080fd5b506103dd6103d8366004613f78565b610e92565b6040516001600160a01b03909116815260200161035a565b34801561040157600080fd5b50610376610410366004613ce2565b610ed6565b34801561042157600080fd5b50610376610430366004613bba565b610f7a565b34801561044157600080fd5b5061038d61012d5481565b34801561045857600080fd5b5061038d610fc7565b34801561046d57600080fd5b5061037661047c366004613e8b565b610fda565b34801561048d57600080fd5b5061037661049c366004613c06565b61105a565b3480156104ad57600080fd5b506104c16104bc366004613fa8565b611065565b604080516001600160a01b03909316835260208301919091520161035a565b3480156104ec57600080fd5b506103766104fb366004613f78565b6110a1565b6103766111f2565b34801561051457600080fd5b50610376610523366004613c06565b6112ff565b34801561053457600080fd5b50610376610543366004613f78565b61131a565b34801561055457600080fd5b5061012e5461056e90640100000000900463ffffffff1681565b60405163ffffffff909116815260200161035a565b34801561058f57600080fd5b5061012e5461056e9063ffffffff1681565b3480156105ad57600080fd5b5061012e5461034e90600160481b900460ff1681565b610376611328565b3480156105d757600080fd5b506105eb6105e6366004613dfd565b6113ac565b60405161035a9190614232565b34801561060457600080fd5b506103dd610613366004613f78565b61149c565b34801561062457600080fd5b5061012e5461034e90600160581b900460ff1681565b34801561064657600080fd5b50610376610655366004613d3d565b6114ae565b34801561066657600080fd5b50610376610675366004613ce2565b6115e1565b34801561068657600080fd5b5061038d610695366004613bba565b611633565b3480156106a657600080fd5b50610376611681565b3480156106bb57600080fd5b506103766106ca366004613e4a565b6116b5565b3480156106db57600080fd5b506106ef6106ea366004613bba565b6117d0565b60405161035a919061429c565b34801561070857600080fd5b5060fb546001600160a01b03166103dd565b34801561072657600080fd5b506103b0611939565b34801561073b57600080fd5b506106ef61074a366004613d0b565b611948565b61037661075d366004613f78565b611b2c565b34801561076e57600080fd5b5061037661077d366004613cb9565b611e0f565b34801561078e57600080fd5b5061037661079d366004613f0f565b611ea5565b3480156107ae57600080fd5b506103766107bd366004613c41565b611f6b565b3480156107ce57600080fd5b506103766107dd366004613d3d565b611faf565b3480156107ee57600080fd5b5061012e5461034e90600160501b900460ff1681565b34801561081057600080fd5b5061082461081f366004613f78565b61222d565b60405161035a9190614342565b34801561083d57600080fd5b50610130546103dd906001600160a01b031681565b34801561085e57600080fd5b506103b061086d366004613f78565b6122e7565b34801561087e57600080fd5b5061038d61088d366004613bba565b6001600160a01b03166000908152610137602052604090205490565b3480156108b557600080fd5b506103766108c4366004613e2f565b612380565b3480156108d557600080fd5b5061038d61012f5481565b3480156108ec57600080fd5b5061034e6108fb366004613bd4565b6001600160a01b039182166000908152606c6020908152604080832093909416825291909152205460ff1690565b610376610937366004613fc9565b6123d5565b34801561094857600080fd5b50610376610957366004613bba565b61288d565b34801561096857600080fd5b50610971612925565b60405161035a9291906141dc565b34801561098b57600080fd5b5061012e5461034e90600160401b900460ff1681565b3480156109ad57600080fd5b506103766109bc366004613e2f565b612a85565b60006001600160e01b0319821663152a902d60e11b14806109e657506109e682612adb565b92915050565b8263ffffffff1660008111610a3d5760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064015b60405180910390fd5b61012e5463ffffffff16811115610a8a5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b6044820152606401610a34565b610a92610fc7565b81610a9b610dea565b610aa591906143ca565b1115610ae85760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610a34565b61012e54640100000000900463ffffffff1681610b0433612b2b565b610b0e91906143ca565b1115610b555760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a34565b8061012d54610b6491906143f6565b341015610ba65760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b6044820152606401610a34565b610130546001600160a01b031615610c8157610130546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610c0157600080fd5b505afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190613f90565b11610c7f5760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b6044820152606401610a34565b505b61012e54600160501b900460ff16610cce5760405162461bcd60e51b815260206004820152601060248201526f283932b9b0b632903737ba1037b832b760811b6044820152606401610a34565b61013654610d125760405162461bcd60e51b815260206004820152601160248201527050726573616c65206e6f7420726561647960781b6044820152606401610a34565b610d8883838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050610136546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120612b56565b610dd45760405162461bcd60e51b815260206004820152601460248201527f4e6f7420612070726573616c65206d656d6265720000000000000000000000006044820152606401610a34565b610de4338563ffffffff16612b6c565b50505050565b60006001606554610dfb9190614415565b905090565b606060678054610e0f90614458565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b90614458565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b6000610e9d82612b86565b610eba576040516333d1c03960e21b815260040160405180910390fd5b506000908152606b60205260409020546001600160a01b031690565b6000610ee18261149c565b9050806001600160a01b0316836001600160a01b03161415610f165760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610f6a576001600160a01b0381166000908152606c6020908152604080832033845290915290205460ff16610f6a576040516367d9dca160e11b815260040160405180910390fd5b610f75838383612bbf565b505050565b60fb546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610a34906142c2565b61013080546001600160a01b0319166001600160a01b0392909216919091179055565b600060665461013154610dfb9190614415565b60fb546001600160a01b031633146110045760405162461bcd60e51b8152600401610a34906142c2565b61012e805461012d9490945568ffffffffff0000000019909316600160401b9415159490940267ffffffff0000000019169390931764010000000063ffffffff928316021763ffffffff19169216919091179055565b610f75838383612c1b565b610133546101345460009182916001600160a01b03909116906103e89061108c90866143f6565b61109691906143e2565b915091509250929050565b3373460fd5059e7301680fa53e63bbbf7272e643e89c146110f65760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a34565b73460fd5059e7301680fa53e63bbbf7272e643e89c60009081526101386020527f39719337746db8067ed31bd30cc7a240f6ddf8ad0cec6cb2791263198d4e1c6454611143908390614415565b73460fd5059e7301680fa53e63bbbf7272e643e89c600090815261013860208190527f39719337746db8067ed31bd30cc7a240f6ddf8ad0cec6cb2791263198d4e1c648590556101398054939450849391929160019081106111b557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906111e99084906143ca565b90915550505050565b478061122f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b6044820152606401610a34565b60005b610139548110156112fb5760006101386000610139848154811061126657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400181205491506103e861129a85846143f6565b6112a491906143e2565b90506112e661013984815481106112cb57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031682612e26565b505080806112f390614493565b915050611232565b5050565b610f7583838360405180602001604052806000815250611f6b565b611325816001612f3f565b50565b60fb546001600160a01b031633146113525760405162461bcd60e51b8152600401610a34906142c2565b34156113765761137673460fd5059e7301680fa53e63bbbf7272e643e89c34612e26565b6113aa61138b60fb546001600160a01b031690565b611393610dea565b61139b610fc7565b6113a59190614415565b612b6c565b565b80516060906000816001600160401b038111156113d957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561142457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816113f75790505b50905060005b8281146114945761146185828151811061145457634e487b7160e01b600052603260045260246000fd5b602002602001015161222d565b82828151811061148157634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161142a565b509392505050565b60006114a782613123565b5192915050565b60fb546001600160a01b031633146114d85760405162461bcd60e51b8152600401610a34906142c2565b80518251146114e657600080fd5b60005b8151811015610f75576114fa610fc7565b82828151811061151a57634e487b7160e01b600052603260045260246000fd5b602002602001015161152a610dea565b61153491906143ca565b11156115775760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610a34565b6115cf83828151811061159a57634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106115c257634e487b7160e01b600052603260045260246000fd5b6020026020010151612b6c565b806115d981614493565b9150506114e9565b60fb546001600160a01b0316331461160b5760405162461bcd60e51b8152600401610a34906142c2565b61013380546001600160a01b0319166001600160a01b03939093169290921790915561013455565b60006001600160a01b03821661165c576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152606a60205260409020546001600160401b031690565b60fb546001600160a01b031633146116ab5760405162461bcd60e51b8152600401610a34906142c2565b6113aa6000613245565b60fb546001600160a01b031633146116df5760405162461bcd60e51b8152600401610a34906142c2565b61012e805460ff60481b1916600160481b84151590810291909117909155611717578051611715906101359060208401906139a7565b505b600182151514156112fb576000610132805461173290614458565b80601f016020809104026020016040519081016040528092919081815260200182805461175e90614458565b80156117ab5780601f10611780576101008083540402835291602001916117ab565b820191906000526020600020905b81548152906001019060200180831161178e57829003601f168201915b50505050509050805160001415610f75578151610de4906101329060208501906139a7565b606060008060006117e085611633565b90506000816001600160401b0381111561180a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611833578160200160208202803683370190505b509050611859604080516060810182526000808252602082018190529181019190915290565b60015b83861461192d57600081815260696020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282019290925292506118c257611925565b81516001600160a01b0316156118d757815194505b876001600160a01b0316856001600160a01b03161415611925578083878060010198508151811061191857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b60010161185c565b50909695505050505050565b606060688054610e0f90614458565b606081831061196a57604051631960ccad60e11b815260040160405180910390fd5b606554600090600185101561197e57600194505b8084111561198a578093505b600061199587611633565b9050848610156119b457858503818110156119ae578091505b506119b8565b5060005b6000816001600160401b038111156119e057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611a09578160200160208202803683370190505b50905081611a1c579350611b2592505050565b6000611a278861222d565b905060008160400151611a38575080515b885b888114158015611a4a5750848714155b15611b1957600081815260696020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16158015928201929092529350611aae57611b11565b82516001600160a01b031615611ac357825191505b8a6001600160a01b0316826001600160a01b03161415611b115780848880600101995081518110611b0457634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611a3a565b50505092835250909150505b9392505050565b8060008111611b725760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b6044820152606401610a34565b61012e5463ffffffff16811115611bbf5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b6044820152606401610a34565b611bc7610fc7565b81611bd0610dea565b611bda91906143ca565b1115611c1d5760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610a34565b61012e54640100000000900463ffffffff1681611c3933612b2b565b611c4391906143ca565b1115611c8a5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a34565b8061012d54611c9991906143f6565b341015611cdb5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b6044820152606401610a34565b610130546001600160a01b031615611db657610130546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613f90565b11611db45760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b6044820152606401610a34565b505b61012e54600160401b900460ff161515600114611e055760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b6044820152606401610a34565b6112fb3383612b6c565b6001600160a01b038216331415611e395760405163b06307db60e01b815260040160405180910390fd5b336000818152606c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600054610100900460ff16611ec05760005460ff1615611ec4565b303b155b611f275760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a34565b600054610100900460ff16158015611f49576000805461ffff19166101011790555b611f54848484613297565b8015610de4576000805461ff001916905550505050565b611f76848484612c1b565b6001600160a01b0383163b15610de457611f928484848461340f565b610de4576040516368d2bf6b60e11b815260040160405180910390fd5b60fb546001600160a01b03163314611fd95760405162461bcd60e51b8152600401610a34906142c2565b60015b61013954811015612045576101386000610139838154811061200e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120558061203d81614493565b915050611fdc565b5081516120539060016143ca565b6001600160401b0381111561207857634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156120a1578160200160208202803683370190505b5080516120b79161013991602090910190613a2b565b5073460fd5059e7301680fa53e63bbbf7272e643e89c6101396000815481106120f057634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8251811015610f755781818151811061214357634e487b7160e01b600052603260045260246000fd5b6020026020010151610138600085848151811061217057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508281815181106121bc57634e487b7160e01b600052603260045260246000fd5b60200260200101516101398260016121d491906143ca565b815481106121f257634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558061222581614493565b91505061211a565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281019290925290600183108061227357506065548310155b1561227e5792915050565b50600082815260696020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252906122de5792915050565b611b2583613123565b60606122f282612b86565b61232f5760405162461bcd60e51b815260206004820152600e60248201526d111bd95cc81b9bdd08195e1a5cdd60921b6044820152606401610a34565b61012e54600160481b900460ff166123745761013561234d83613507565b60405160200161235e9291906140e6565b6040516020818303038152906040529050919050565b61013261234d83613507565b60fb546001600160a01b031633146123aa5760405162461bcd60e51b8152600401610a34906142c2565b61012e8054921515600160501b026aff00000000000000000000199093169290921790915561013655565b8163ffffffff16600081116124215760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b6044820152606401610a34565b61012e5463ffffffff1681111561246e5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b6044820152606401610a34565b612476610fc7565b8161247f610dea565b61248991906143ca565b11156124cc5760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610a34565b61012e54640100000000900463ffffffff16816124e833612b2b565b6124f291906143ca565b11156125395760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a34565b8061012d5461254891906143f6565b34101561258a5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b6044820152606401610a34565b610130546001600160a01b03161561266557610130546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261d9190613f90565b116126635760405162461bcd60e51b81526020600482015260166024820152751058d8d95cdcc81d1bdad95b881b9bdd081bdddb995960521b6044820152606401610a34565b505b61012e54600160581b900460ff1615156001146126b95760405162461bcd60e51b81526020600482015260126024820152712932b332b93930b639903737ba1037b832b760711b6044820152606401610a34565b61012e54600160401b900460ff1615156001146127085760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b6044820152606401610a34565b600061012f54116127505760405162461bcd60e51b81526020600482015260126024820152714361702069732073657420746f207a65726f60701b6044820152606401610a34565b600061275b83612b2b565b116127a85760405162461bcd60e51b815260206004820152601760248201527f526566657272657220686173206e6f74206d696e7465640000000000000000006044820152606401610a34565b336001600160a01b03831614156128015760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420726566657220796f757273656c6600000000000000000000006044820152606401610a34565b612811338463ffffffff16612b6c565b6001600160a01b03821660009081526101376020526040812080546001929061283b9084906143ca565b909155505061012f546001600160a01b0383166000908152610137602052604090205461286891906144ae565b610f7557612874610fc7565b61287c610dea565b1015610f7557610f75826001612b6c565b60fb546001600160a01b031633146128b75760405162461bcd60e51b8152600401610a34906142c2565b6001600160a01b03811661291c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b61132581613245565b6060806000610139805490506001600160401b0381111561295657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561297f578160200160208202803683370190505b50905060005b61013954811015612a1b57610138600061013983815481106129b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106129fe57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280612a1381614493565b915050612985565b506101398181805480602002602001604051908101604052809291908181526020018280548015612a7557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a57575b5050505050915092509250509091565b60fb546001600160a01b03163314612aaf5760405162461bcd60e51b8152600401610a34906142c2565b61012e8054921515600160581b026bff0000000000000000000000199093169290921790915561012f55565b60006001600160e01b031982166380ac58cd60e01b1480612b0c57506001600160e01b03198216635b5e139f60e01b145b806109e657506301ffc9a760e01b6001600160e01b03198316146109e6565b6001600160a01b03166000908152606a6020526040902054600160401b90046001600160401b031690565b600082612b638584613620565b14949350505050565b6112fb8282604051806020016040528060008152506136d2565b600081600111158015612b9a575060655482105b80156109e6575050600090815260696020526040902054600160e01b900460ff161590565b6000828152606b602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000612c2682613123565b9050836001600160a01b031681600001516001600160a01b031614612c5d5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480612c9957506001600160a01b0385166000908152606c6020908152604080832033845290915290205460ff165b80612cb4575033612ca984610e92565b6001600160a01b0316145b905080612cd457604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416612cfb57604051633a954ecd60e21b815260040160405180910390fd5b612d0760008487612bbf565b6001600160a01b038581166000908152606a60209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652606990945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116612ddb576065548214612ddb57805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b80471015612e765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a34565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612ec3576040519150601f19603f3d011682016040523d82523d6000602084013e612ec8565b606091505b5050905080610f755760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a34565b6000612f4a83613123565b80519091508215612fce576000336001600160a01b0383161480612f9157506001600160a01b0382166000908152606c6020908152604080832033845290915290205460ff165b80612fac575033612fa186610e92565b6001600160a01b0316145b905080612fcc57604051632ce44b5f60e11b815260040160405180910390fd5b505b612fda60008583612bbf565b6001600160a01b038082166000818152606a602090815260408083208054600160801b6000196001600160401b0380841691909101811667ffffffffffffffff198416811783900482166001908101831690930277ffffffffffffffff0000000000000000ffffffffffffffff19909416179290921783558b86526069909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b1785559189018084529220805491949091166130d85760655482146130d857805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450506066805460010190555050565b6040805160608101825260008082526020820181905291810191909152818060011161322c5760655481101561322c57600081815260696020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061322a5780516001600160a01b0316156131c1579392505050565b5060001901600081815260696020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215613225579392505050565b6131c1565b505b604051636f96cda160e11b815260040160405180910390fd5b60fb80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166132be5760405162461bcd60e51b8152600401610a34906142f7565b6132c88383613890565b6132d06138c1565b6132d86138c1565b6132e06138e8565b61013181905561012e805460ff60481b1916905573460fd5059e7301680fa53e63bbbf7272e643e89c6000908152610138602081905260317f39719337746db8067ed31bd30cc7a240f6ddf8ad0cec6cb2791263198d4e1c64556103b79161335060fb546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120919091556101398054600181018255918190527f22d66071756d4d57920b8322c1a903a27bd75b44065e925d5f9f1c08908d28f690910180546001600160a01b03191673460fd5059e7301680fa53e63bbbf7272e643e89c1790556133d860fb546001600160a01b031690565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906134449033908990889088906004016141a0565b602060405180830381600087803b15801561345e57600080fd5b505af192505050801561348e575060408051601f3d908101601f1916820190925261348b91810190613ef3565b60015b6134e9573d8080156134bc576040519150601f19603f3d011682016040523d82523d6000602084013e6134c1565b606091505b5080516134e1576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60608161352b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613555578061353f81614493565b915061354e9050600a836143e2565b915061352f565b6000816001600160401b0381111561357d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135a7576020820181803683370190505b5090505b84156134ff576135bc600183614415565b91506135c9600a866144ae565b6135d49060306143ca565b60f81b8183815181106135f757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350613619600a866143e2565b94506135ab565b600081815b845181101561149457600085828151811061365057634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116136925760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506136bf565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806136ca81614493565b915050613625565b6065546001600160a01b0384166136fb57604051622e076360e81b815260040160405180910390fd5b826137195760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0384166000818152606a6020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168b018116918217600160401b67ffffffffffffffff1990941690921783900481168b01811690920217909155858452606990925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b1561383c575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4613805600087848060010195508761340f565b613822576040516368d2bf6b60e11b815260040160405180910390fd5b8082106137ba57826065541461383757600080fd5b613881565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821061383d575b50606555610de4600085838684565b600054610100900460ff166138b75760405162461bcd60e51b8152600401610a34906142f7565b6112fb828261391f565b600054610100900460ff166113aa5760405162461bcd60e51b8152600401610a34906142f7565b600054610100900460ff1661390f5760405162461bcd60e51b8152600401610a34906142f7565b6139176138c1565b6113aa613977565b600054610100900460ff166139465760405162461bcd60e51b8152600401610a34906142f7565b81516139599060679060208501906139a7565b50805161396d9060689060208401906139a7565b5060016065555050565b600054610100900460ff1661399e5760405162461bcd60e51b8152600401610a34906142f7565b6113aa33613245565b8280546139b390614458565b90600052602060002090601f0160209004810192826139d55760008555613a1b565b82601f106139ee57805160ff1916838001178555613a1b565b82800160010185558215613a1b579182015b82811115613a1b578251825591602001919060010190613a00565b50613a27929150613a80565b5090565b828054828255906000526020600020908101928215613a1b579160200282015b82811115613a1b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a4b565b5b80821115613a275760008155600101613a81565b60006001600160401b03831115613aae57613aae6144ee565b613ac1601f8401601f1916602001614377565b9050828152838383011115613ad557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114613b0357600080fd5b919050565b600082601f830112613b18578081fd5b81356020613b2d613b28836143a7565b614377565b80838252828201915082860187848660051b8901011115613b4c578586fd5b855b85811015613b6a57813584529284019290840190600101613b4e565b5090979650505050505050565b80358015158114613b0357600080fd5b600082601f830112613b97578081fd5b611b2583833560208501613a95565b803563ffffffff81168114613b0357600080fd5b600060208284031215613bcb578081fd5b611b2582613aec565b60008060408385031215613be6578081fd5b613bef83613aec565b9150613bfd60208401613aec565b90509250929050565b600080600060608486031215613c1a578081fd5b613c2384613aec565b9250613c3160208501613aec565b9150604084013590509250925092565b60008060008060808587031215613c56578081fd5b613c5f85613aec565b9350613c6d60208601613aec565b92506040850135915060608501356001600160401b03811115613c8e578182fd5b8501601f81018713613c9e578182fd5b613cad87823560208401613a95565b91505092959194509250565b60008060408385031215613ccb578182fd5b613cd483613aec565b9150613bfd60208401613b77565b60008060408385031215613cf4578182fd5b613cfd83613aec565b946020939093013593505050565b600080600060608486031215613d1f578283fd5b613d2884613aec565b95602085013595506040909401359392505050565b60008060408385031215613d4f578182fd5b82356001600160401b0380821115613d65578384fd5b818501915085601f830112613d78578384fd5b81356020613d88613b28836143a7565b8083825282820191508286018a848660051b8901011115613da7578889fd5b8896505b84871015613dd057613dbc81613aec565b835260019690960195918301918301613dab565b5096505086013592505080821115613de6578283fd5b50613df385828601613b08565b9150509250929050565b600060208284031215613e0e578081fd5b81356001600160401b03811115613e23578182fd5b6134ff84828501613b08565b60008060408385031215613e41578182fd5b613cfd83613b77565b60008060408385031215613e5c578182fd5b613e6583613b77565b915060208301356001600160401b03811115613e7f578182fd5b613df385828601613b87565b60008060008060808587031215613ea0578182fd5b613ea985613b77565b935060208501359250613ebe60408601613ba6565b9150613ecc60608601613ba6565b905092959194509250565b600060208284031215613ee8578081fd5b8135611b2581614504565b600060208284031215613f04578081fd5b8151611b2581614504565b600080600060608486031215613f23578081fd5b83356001600160401b0380821115613f39578283fd5b613f4587838801613b87565b94506020860135915080821115613f5a578283fd5b50613f6786828701613b87565b925050604084013590509250925092565b600060208284031215613f89578081fd5b5035919050565b600060208284031215613fa1578081fd5b5051919050565b60008060408385031215613fba578182fd5b50508035926020909101359150565b60008060408385031215613fdb578182fd5b613bef83613ba6565b600080600060408486031215613ff8578081fd5b61400184613ba6565b925060208401356001600160401b038082111561401c578283fd5b818601915086601f83011261402f578283fd5b81358181111561403d578384fd5b8760208260051b8501011115614051578384fd5b6020830194508093505050509250925092565b6000815180845260208085019450808401835b8381101561409357815187529582019590820190600101614077565b509495945050505050565b600081518084526140b681602086016020860161442c565b601f01601f19169290920160200192915050565b600081516140dc81856020860161442c565b9290920192915050565b600080845482600182811c91508083168061410257607f831692505b602080841082141561412257634e487b7160e01b87526022600452602487fd5b818015614136576001811461414757614173565b60ff19861689528489019650614173565b60008b815260209020885b8681101561416b5781548b820152908501908301614152565b505084890196505b50505050505061419761418682866140ca565b64173539b7b760d91b815260050190565b95945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526141d2608083018461409e565b9695505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561421e5781516001600160a01b0316845292840192908401906001016141f9565b505050838103828501526141d28186614064565b6020808252825182820181905260009190848201906040850190845b8181101561192d5761428983855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b928401926060929092019160010161424e565b602081526000611b256020830184614064565b602081526000611b25602083018461409e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81516001600160a01b031681526020808301516001600160401b031690820152604080830151151590820152606081016109e6565b604051601f8201601f191681016001600160401b038111828210171561439f5761439f6144ee565b604052919050565b60006001600160401b038211156143c0576143c06144ee565b5060051b60200190565b600082198211156143dd576143dd6144c2565b500190565b6000826143f1576143f16144d8565b500490565b6000816000190483118215151615614410576144106144c2565b500290565b600082821015614427576144276144c2565b500390565b60005b8381101561444757818101518382015260200161442f565b83811115610de45750506000910152565b600181811c9082168061446c57607f821691505b6020821081141561448d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156144a7576144a76144c2565b5060010190565b6000826144bd576144bd6144d8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461132557600080fdfea26469706673582212209012868252bc6ca1d523a4088439ff588d2d02550967be178a2555df6b64387364736f6c63430008040033