60806040523480156200001157600080fd5b506040516200237638038062002376833981016040819052620000349162000402565b6040805180820182526005815264082d8cae0d60db1b6020808301918252835180850190945260068452650dc82988aa0960d31b9084015281519192916200007f916003916200035c565b508051620000959060049060208401906200035c565b50506006805460ff1916905550620000af60003362000124565b620000db7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000124565b620001077f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000134565b620001133382620001d8565b6200011d620002c1565b5062000480565b62000130828262000134565b5050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620001305760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001943390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b038216620002345760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600260008282546200024891906200041c565b90915550506001600160a01b03821660009081526020819052604081208054839290620002779084906200041c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60065460ff1615620003095760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200022b565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200033f3390565b6040516001600160a01b03909116815260200160405180910390a1565b8280546200036a9062000443565b90600052602060002090601f0160209004810192826200038e5760008555620003d9565b82601f10620003a957805160ff1916838001178555620003d9565b82800160010185558215620003d9579182015b82811115620003d9578251825591602001919060010190620003bc565b50620003e7929150620003eb565b5090565b5b80821115620003e75760008155600101620003ec565b6000602082840312156200041557600080fd5b5051919050565b600082198211156200043e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200045857607f821691505b602082108114156200047a57634e487b7160e01b600052602260045260246000fd5b50919050565b611ee680620004906000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d547741f11610071578063d547741f1461042f578063dd62ed3e14610442578063e63ab1e914610488578063e7a764ef146104af57600080fd5b8063a457c2d7146103e2578063a9059cbb146103f5578063d53913931461040857600080fd5b80639290098d116100d35780639290098d1461039f57806395d89b41146103bf578063a217fddf146103c7578063a25ffa5d146103cf57600080fd5b806370a082311461031b5780638456cb591461035157806391d148541461035957600080fd5b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146102ab57806340c10f19146102b35780635a4528c2146102c65780635c975abb1461031057600080fd5b8063313ce5671461027657806336568abe14610285578063395093511461029857600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632f2ff15d1461026157600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d7366004611ab2565b6104c2565b60405190151581526020015b60405180910390f35b6101f961055b565b6040516101e89190611b20565b6101dc610214366004611b93565b6105ed565b6002545b6040519081526020016101e8565b6101dc610239366004611bbf565b610605565b61021d61024c366004611c00565b60009081526005602052604090206001015490565b61027461026f366004611c19565b610695565b005b604051601281526020016101e8565b610274610293366004611c19565b6106c0565b6101dc6102a6366004611b93565b610773565b6102746107bf565b6102746102c1366004611b93565b6107f5565b6006546102eb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b60065460ff166101dc565b61021d610329366004611c49565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61027461082a565b6101dc610367366004611c19565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6007546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f961085d565b61021d600081565b6102746103dd366004611c49565b61086c565b6101dc6103f0366004611b93565b6108c0565b6101dc610403366004611b93565b61099c565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61027461043d366004611c19565b610a25565b61021d610450366004611c66565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102746104bd366004611c49565b610a4b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061055557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461056a90611c94565b80601f016020809104026020016040519081016040528092919081815260200182805461059690611c94565b80156105e35780601f106105b8576101008083540402835291602001916105e3565b820191906000526020600020905b8154815290600101906020018083116105c657829003601f168201915b5050505050905090565b6000336105fb818585610b21565b5060019392505050565b600061061360065460ff1690565b1561067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b61068a843384610cd4565b6105fb848484610dab565b6000828152600560205260409020600101546106b18133611326565b6106bb83836113f8565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610676565b61076f82826114ec565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105fb90829086906107ba908790611d17565b610b21565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107ea8133611326565b6107f26115a7565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108208133611326565b6106bb8383611688565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108558133611326565b6107f26117a8565b60606004805461056a90611c94565b60006108788133611326565b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610676565b6109918286868403610b21565b506001949350505050565b60006109aa60065460ff1690565b15610a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610676565b610a1c338484610dab565b50600192915050565b600082815260056020526040902060010154610a418133611326565b6106bb83836114ec565b6000610a578133611326565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610676565b506006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8316610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610676565b73ffffffffffffffffffffffffffffffffffffffff8216610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610676565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610da55781811015610d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610676565b610da58484848403610b21565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610676565b73ffffffffffffffffffffffffffffffffffffffff8216610ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610676565b60008111610f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5472616e7366657220616d6f756e742073686f756c642062652067726561746560448201527f72207468616e207a65726f0000000000000000000000000000000000000000006064820152608401610676565b60075460009073ffffffffffffffffffffffffffffffffffffffff1615611050576007546040517f8e1ae1df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301523360448301526064820185905290911690638e1ae1df906084016020604051808303816000875af1158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d9190611d2f565b90505b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205482811015611106576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610676565b73ffffffffffffffffffffffffffffffffffffffff851660009081526020819052604090208382039055811561128c576111408284611d48565b600654610100900473ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040812080549295508492909190611181908490611d17565b909155505060065460405173ffffffffffffffffffffffffffffffffffffffff6101009092048216918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111dc9086815260200190565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604081208054859290611219908490611d17565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161127f91815260200190565b60405180910390a361131f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081905260409020546112bd908490611d17565b73ffffffffffffffffffffffffffffffffffffffff8581166000818152602081815260409182902094909455518681529092918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050505050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661076f5761137e8173ffffffffffffffffffffffffffffffffffffffff166014611868565b611389836020611868565b60405160200161139a929190611d5f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261067691600401611b20565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661076f57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561148e3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561076f57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60065460ff16611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610676565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610676565b80600260008282546117179190611d17565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611751908490611d17565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60065460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610676565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861165e3390565b60606000611877836002611de0565b611882906002611d17565b67ffffffffffffffff81111561189a5761189a611e1d565b6040519080825280601f01601f1916602001820160405280156118c4576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106118fb576118fb611e4c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061195e5761195e611e4c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061199a846002611de0565b6119a5906001611d17565b90505b6001811115611a42577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106119e6576119e6611e4c565b1a60f81b8282815181106119fc576119fc611e4c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611a3b81611e7b565b90506119a8565b508315611aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610676565b9392505050565b600060208284031215611ac457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611aab57600080fd5b60005b83811015611b0f578181015183820152602001611af7565b83811115610da55750506000910152565b6020815260008251806020840152611b3f816040850160208701611af4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146107f257600080fd5b60008060408385031215611ba657600080fd5b8235611bb181611b71565b946020939093013593505050565b600080600060608486031215611bd457600080fd5b8335611bdf81611b71565b92506020840135611bef81611b71565b929592945050506040919091013590565b600060208284031215611c1257600080fd5b5035919050565b60008060408385031215611c2c57600080fd5b823591506020830135611c3e81611b71565b809150509250929050565b600060208284031215611c5b57600080fd5b8135611aab81611b71565b60008060408385031215611c7957600080fd5b8235611c8481611b71565b91506020830135611c3e81611b71565b600181811c90821680611ca857607f821691505b60208210811415611ce2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611d2a57611d2a611ce8565b500190565b600060208284031215611d4157600080fd5b5051919050565b600082821015611d5a57611d5a611ce8565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611d97816017850160208801611af4565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611dd4816028840160208801611af4565b01602801949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e1857611e18611ce8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081611e8a57611e8a611ce8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122059664fb75f432832d58c6195dd0468792b3d0eb4b27bd69b293eff3a7607a20464736f6c634300080c00330000000000000000000000000000000000000000000000000000000000000000