60806040523480156200001157600080fd5b5060405162001d8038038062001d80833981016040819052620000349162000127565b6040518060400160405280601581526020017f546865204775696c642050726f66696c65204e465400000000000000000000008152506040518060400160405280600881526020016711dd5a5b1913919560c21b81525081600090816200009c9190620001fe565b506001620000ab8282620001fe565b505060078054600160201b600160c01b0319811633640100000000029081178355600880546001600160a01b0319166001600160a01b03871617905563ffffffff918216911617915060006200010183620002ca565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050620002fc565b6000602082840312156200013a57600080fd5b81516001600160a01b03811681146200015257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018457607f821691505b602082108103620001a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f957600081815260208120601f850160051c81016020861015620001d45750805b601f850160051c820191505b81811015620001f557828155600101620001e0565b5050505b505050565b81516001600160401b038111156200021a576200021a62000159565b62000232816200022b84546200016f565b84620001ab565b602080601f8311600181146200026a5760008415620002515750858301515b600019600386901b1c1916600185901b178555620001f5565b600085815260208120601f198616915b828110156200029b578886015182559484019460019091019084016200027a565b5085821015620002ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600063ffffffff808316818103620002f257634e487b7160e01b600052601160045260246000fd5b6001019392505050565b611a74806200030c6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636352211e116100b8578063a3f5c1d21161007c578063a3f5c1d2146102c8578063b88d4fde146102db578063c06d7f22146102ee578063c87b56dd14610313578063e1e1139e14610326578063e985e9c51461033957600080fd5b80636352211e1461026657806370a0823114610279578063800974841461029a57806395d89b41146102ad578063a22cb465146102b557600080fd5b80630a0e57811161010a5780630a0e5781146101d757806323b872dd146101f25780632670b817146102055780633c93042c1461021857806342842e0e1461024057806361a297511461025357600080fd5b806301ffc9a714610147578063056097ac1461016f57806306fdde0314610184578063081812fc14610199578063095ea7b3146101c4575b600080fd5b61015a6101553660046113c2565b61034c565b60405190151581526020015b60405180910390f35b61018261017d3660046113f4565b610377565b005b61018c61053e565b604051610166919061147d565b6101ac6101a7366004611490565b6105d0565b6040516001600160a01b039091168152602001610166565b6101826101d23660046114a9565b6105f9565b6007546101ac9064010000000090046001600160a01b031681565b6101826102003660046114d5565b610604565b610182610213366004611516565b610689565b61022b6102263660046115df565b6106dd565b60405163ffffffff9091168152602001610166565b61018261024e3660046114d5565b610785565b610182610261366004611516565b6107a0565b6101ac610274366004611490565b610800565b61028c610287366004611516565b61080b565b604051908152602001610166565b6101826102a8366004611648565b610853565b61018c610864565b6101826102c336600461168b565b610873565b6008546101ac906001600160a01b031681565b6101826102e93660046116b9565b61087e565b6103016102fc366004611739565b610895565b60405160ff9091168152602001610166565b61018c610321366004611490565b61096e565b610182610334366004611754565b610a7f565b61015a6103473660046113f4565b610bc3565b60006001600160e01b03198216632483248360e11b1480610371575061037182610bf1565b92915050565b60075464010000000090046001600160a01b031633146103b25760405162461bcd60e51b81526004016103a990611770565b60405180910390fd5b6001600160a01b038216610455576000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461040d576040519150601f19603f3d011682016040523d82523d6000602084013e610412565b606091505b50509050806104505760405162461bcd60e51b815260206004820152600a60248201526929b2b7321032b93937b960b11b60448201526064016103a9565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c09190611798565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053791906117b1565b50505b5050565b60606000805461054d906117ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610579906117ce565b80156105c65780601f1061059b576101008083540402835291602001916105c6565b820191906000526020600020905b8154815290600101906020018083116105a957829003601f168201915b5050505050905090565b60006105db82610c41565b506000828152600460205260409020546001600160a01b0316610371565b61053a828233610c7a565b6001600160a01b03821661062e57604051633250574960e11b8152600060048201526024016103a9565b600061063b838333610c87565b9050836001600160a01b0316816001600160a01b031614610537576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103a9565b60075464010000000090046001600160a01b031633146106bb5760405162461bcd60e51b81526004016103a990611770565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6008546000906001600160a01b031633146107275760405162461bcd60e51b815260206004820152600a6024820152696f6e6c79206e6578757360b01b60448201526064016103a9565b6007805463ffffffff16908190600061073f83611808565b91906101000a81548163ffffffff021916908363ffffffff1602179055505061076e848263ffffffff16610d80565b61077e8163ffffffff1684610de5565b9392505050565b6104508383836040518060200160405280600081525061087e565b60075464010000000090046001600160a01b031633146107d25760405162461bcd60e51b81526004016103a990611770565b600780546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b600061037182610c41565b60006001600160a01b038216610837576040516322718ad960e21b8152600060048201526024016103a9565b506001600160a01b031660009081526003602052604090205490565b61053a33838363ffffffff16610785565b60606001805461054d906117ce565b61053a338383610e35565b610889848484610604565b61053784848484610ed4565b60085460405162342a8160e21b815263ffffffff8316600482015260009182916001600160a01b039091169062d0aa0490602401602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190611839565b9050806001600160a01b0316635ad701c26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190611856565b606061097982610c41565b5060008281526006602052604081208054610993906117ce565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf906117ce565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b505050505090506000610a2a60408051602081019091526000815290565b90508051600003610a3c575092915050565b815115610a6e578082604051602001610a56929190611879565b60405160208183030381529060405292505050919050565b610a7784610ffd565b949350505050565b600854604080516353adc3e960e11b815290516000926001600160a01b03169163a75b87d29160048083019260209291908290030181865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190611839565b9050336001600160a01b03821614610b535760405162461bcd60e51b8152602060048201526024808201527f4f6e6c7920477561726469616e2063616e2075706461746520546f6b656e27736044820152632055524960e01b60648201526084016103a9565b6000610b648463ffffffff1661096e565b9050610b768463ffffffff1684610de5565b7feb0ff494c0855e7c27233e02cb7987f997be6005d24b09af504d00f2e349c89181610ba78663ffffffff1661096e565b604051610bb59291906118a8565b60405180910390a150505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b1480610c2257506001600160e01b03198216635b5e139f60e01b145b8061037157506301ffc9a760e01b6001600160e01b0319831614610371565b6000818152600260205260408120546001600160a01b03168061037157604051637e27328960e01b8152600481018490526024016103a9565b6104508383836001611071565b6000828152600260205260408120546001600160a01b0390811690831615610cb457610cb4818486611177565b6001600160a01b03811615610cf257610cd1600085600080611071565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610d21576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b038216610daa57604051633250574960e11b8152600060048201526024016103a9565b6000610db883836000610c87565b90506001600160a01b03811615610450576040516339e3563760e11b8152600060048201526024016103a9565b6000828152600660205260409020610dfd8282611924565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6001600160a01b038216610e6757604051630b61174360e31b81526001600160a01b03831660048201526024016103a9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561053757604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f169033908890879087906004016119e4565b6020604051808303816000875af1925050508015610f51575060408051601f3d908101601f19168201909252610f4e91810190611a21565b60015b610fba573d808015610f7f576040519150601f19603f3d011682016040523d82523d6000602084013e610f84565b606091505b508051600003610fb257604051633250574960e11b81526001600160a01b03851660048201526024016103a9565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610ff657604051633250574960e11b81526001600160a01b03851660048201526024016103a9565b5050505050565b606061100882610c41565b50600061102060408051602081019091526000815290565b90506000815111611040576040518060200160405280600081525061077e565b8061104a846111db565b60405160200161105b929190611879565b6040516020818303038152906040529392505050565b808061108557506001600160a01b03821615155b1561114757600061109584610c41565b90506001600160a01b038316158015906110c15750826001600160a01b0316816001600160a01b031614155b80156110d457506110d28184610bc3565b155b156110fd5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103a9565b81156111455783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61118283838361126e565b610450576001600160a01b0383166111b057604051637e27328960e01b8152600481018290526024016103a9565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103a9565b606060006111e8836112d1565b600101905060008167ffffffffffffffff81111561120857611208611533565b6040519080825280601f01601f191660200182016040528015611232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461123c57509392505050565b60006001600160a01b03831615801590610a775750826001600160a01b0316846001600160a01b031614806112a857506112a88484610bc3565b80610a775750506000908152600460205260409020546001600160a01b03908116911614919050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113105772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061133c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061135a57662386f26fc10000830492506010015b6305f5e1008310611372576305f5e100830492506008015b612710831061138657612710830492506004015b60648310611398576064830492506002015b600a83106103715760010192915050565b6001600160e01b0319811681146113bf57600080fd5b50565b6000602082840312156113d457600080fd5b813561077e816113a9565b6001600160a01b03811681146113bf57600080fd5b6000806040838503121561140757600080fd5b8235611412816113df565b91506020830135611422816113df565b809150509250929050565b60005b83811015611448578181015183820152602001611430565b50506000910152565b6000815180845261146981602086016020860161142d565b601f01601f19169290920160200192915050565b60208152600061077e6020830184611451565b6000602082840312156114a257600080fd5b5035919050565b600080604083850312156114bc57600080fd5b82356114c7816113df565b946020939093013593505050565b6000806000606084860312156114ea57600080fd5b83356114f5816113df565b92506020840135611505816113df565b929592945050506040919091013590565b60006020828403121561152857600080fd5b813561077e816113df565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561156457611564611533565b604051601f8501601f19908116603f0116810190828211818310171561158c5761158c611533565b816040528093508581528686860111156115a557600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126115d057600080fd5b61077e83833560208501611549565b600080604083850312156115f257600080fd5b82356115fd816113df565b9150602083013567ffffffffffffffff81111561161957600080fd5b611625858286016115bf565b9150509250929050565b803563ffffffff8116811461164357600080fd5b919050565b6000806040838503121561165b57600080fd5b8235611666816113df565b91506116746020840161162f565b90509250929050565b80151581146113bf57600080fd5b6000806040838503121561169e57600080fd5b82356116a9816113df565b915060208301356114228161167d565b600080600080608085870312156116cf57600080fd5b84356116da816113df565b935060208501356116ea816113df565b925060408501359150606085013567ffffffffffffffff81111561170d57600080fd5b8501601f8101871361171e57600080fd5b61172d87823560208401611549565b91505092959194509250565b60006020828403121561174b57600080fd5b61077e8261162f565b6000806040838503121561176757600080fd5b6115fd8361162f565b6020808252600e908201526d37b7363c9021b7bab739b2b637b960911b604082015260600190565b6000602082840312156117aa57600080fd5b5051919050565b6000602082840312156117c357600080fd5b815161077e8161167d565b600181811c908216806117e257607f821691505b60208210810361180257634e487b7160e01b600052602260045260246000fd5b50919050565b600063ffffffff80831681810361182f57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60006020828403121561184b57600080fd5b815161077e816113df565b60006020828403121561186857600080fd5b815160ff8116811461077e57600080fd5b6000835161188b81846020880161142d565b83519083019061189f81836020880161142d565b01949350505050565b6040815260006118bb6040830185611451565b82810360208401526118cd8185611451565b95945050505050565b601f82111561045057600081815260208120601f850160051c810160208610156118fd5750805b601f850160051c820191505b8181101561191c57828155600101611909565b505050505050565b815167ffffffffffffffff81111561193e5761193e611533565b6119528161194c84546117ce565b846118d6565b602080601f831160018114611987576000841561196f5750858301515b600019600386901b1c1916600185901b17855561191c565b600085815260208120601f198616915b828110156119b657888601518255948401946001909101908401611997565b50858210156119d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a1790830184611451565b9695505050505050565b600060208284031215611a3357600080fd5b815161077e816113a956fea264697066735822122077b6a81f7d513bc3421a765118cedfa106f1053529897fc4f854a17c9bdb0f4f64736f6c634300081400330000000000000000000000006f416e473dd689f55bb18f8a9a7012c61d83be76