0x60806040523480156200001157600080fd5b50600054610100900460ff16806200002e57506200002e620000c0565b806200003d575060005460ff16155b6200007a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806200511c602e913960400191505060405180910390fd5b600054610100900460ff16158015620000a6576000805460ff1961ff0019909116610100171660011790555b8015620000b9576000805461ff00191690555b50620000e4565b6000620000d830620000de60201b6200175a1760201c565b15905090565b3b151590565b61502880620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80635c975abb11610167578063a457c2d7116100ce578063d331bef711610087578063d331bef714610549578063d34879971461055c578063d547741f1461056f578063dd62ed3e14610582578063ef94c27914610595578063fa461e331461059d576102a0565b8063a457c2d7146104df578063a9059cbb146104f2578063abbffcb914610505578063c4a7761e14610526578063ca15c8731461052e578063d21220a714610541576102a0565b80638ea234cb116101205780638ea234cb1461048e5780639010d07c146104a157806391d14854146104b457806395d89b41146104c75780639b1344ac146104cf578063a217fddf146104d7576102a0565b80635c975abb1461044857806363db7eae1461045057806370a0823114610458578063727dd2281461046b57806374b396fb146104735780638456cb5914610486576102a0565b8063248a9ca31161020b578063365d0ed7116101c4578063365d0ed7146103e6578063366e897b1461040857806339509351146104105780633c1d5df0146104235780633f2218f1146104385780633f4ba83a14610440576102a0565b8063248a9ca31461037d57806326563b40146103905780632b528d33146103985780632f2ff15d146103ab578063313ce567146103be57806336568abe146103d3576102a0565b806316f0115b1161025d57806316f0115b1461033557806318160ddd1461033d57806318178358146103455780631c1f19361461034f57806323b872dd14610357578063246581f71461036a576102a0565b806301ffc9a7146102a557806302bcd6ca146102ce57806306fdde03146102e3578063095ea7b3146102f85780630dfe16811461030b5780631053f87114610320575b600080fd5b6102b86102b33660046144fc565b6105b0565b6040516102c59190614a6d565b60405180910390f35b6102d6610639565b6040516102c59190614a78565b6102eb61063f565b6040516102c59190614aca565b6102b861030636600461439c565b6106d5565b6103136106f3565b6040516102c59190614914565b610328610702565b6040516102c59190614a96565b610313610712565b6102d6610721565b61034d610727565b005b6102d66107eb565b6102b861036536600461435c565b6107f1565b61034d6103783660046142b1565b610879565b6102d661038b36600461449f565b6109a6565b6103136109bb565b61034d6103a636600461482f565b6109d1565b61034d6103b93660046144b7565b610ad7565b6103c6610b3e565b6040516102c59190614c68565b61034d6103e13660046144b7565b610b47565b6103f96103f436600461489c565b610ba8565b6040516102c593929190614c41565b6102d6610c7c565b6102b861041e36600461439c565b610c82565b61042b610cd0565b6040516102c59190614c57565b6102d6610ce3565b61034d610ce9565b6102b8610d29565b6102d6610d32565b6102d661046636600461415c565b610d38565b610328610d53565b61034d6104813660046147d0565b610d63565b61034d6110b8565b61034d61049c36600461482f565b6110f5565b6103136104af3660046144db565b611194565b6102b86104c23660046144b7565b6111ac565b6102eb6111c4565b610328611225565b6102d661122e565b6102b86104ed36600461439c565b611233565b6102b861050036600461439c565b61129b565b610518610513366004614524565b6112af565b6040516102c5929190614c33565b61051861140b565b6102d661053c36600461449f565b61153a565b610313611551565b61051861055736600461485c565b611560565b61034d61056a366004614591565b611651565b61034d61057d3660046144b7565b611679565b6102d6610590366004614279565b6116d2565b6102d66116fd565b61034d6105ab366004614591565b611703565b60c95460405163ab8b2a7360e01b81526000916001600160a01b03169063ab8b2a73906105e1908590600401614a81565b60206040518083038186803b1580156105f957600080fd5b505afa15801561060d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106319190614485565b90505b919050565b60cd5481565b60368054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106cb5780601f106106a0576101008083540402835291602001916106cb565b820191906000526020600020905b8154815290600101906020018083116106ae57829003601f168201915b5050505050905090565b60006106e96106e2611760565b8484611764565b5060015b92915050565b60ca546001600160a01b031681565b60d054600160a01b900460020b81565b60d0546001600160a01b031681565b60355490565b60f954600281810b9163010000009004900b60006107458383611850565b5050505090506000816001600160801b031611156107e65760d05460405163a34123a760e01b81526001600160a01b039091169063a34123a7906107929086908690600090600401614aa4565b6040805180830381600087803b1580156107ab57600080fd5b505af11580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e3919061456e565b50505b505050565b611a0b81565b60006107fe8484846118f6565b61086e8461080a611760565b61086985604051806060016040528060288152602001614ec3602891396001600160a01b038a16600090815260346020526040812090610848611760565b6001600160a01b031681526020810191909152604001600020549190611a53565b611764565b5060015b9392505050565b600080828060200190518101906108909190614217565b915091506000336001600160a01b031663ed9506386040518163ffffffff1660e01b815260040160206040518083038186803b1580156108cf57600080fd5b505afa1580156108e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109079190614178565b60405163ed316ad960e01b81529091506001600160a01b0382169063ed316ad990610936908690600401614914565b600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b505060f980546601000000000000600160d01b031916600160301b6001600160a01b038616021790555061099d90508760008785611aea565b50505050505050565b60009081526097602052604090206002015490565b60f954600160301b90046001600160a01b031681565b6109d9610d29565b15610a1e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c95460405163015a1d6760e31b81526001600160a01b0390911690630ad0eb3890610a4e903090600401614914565b60206040518083038186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190614178565b6001600160a01b0316336001600160a01b031614610abb57600080fd5b610acc8160ce5460cf548686611e86565b60cf5560ce55505050565b600082815260976020526040902060020154610af5906104c2611760565b610b305760405162461bcd60e51b815260040180806020018281038252602f815260200180614d85602f913960400191505060405180910390fd5b610b3a8282611ef8565b5050565b60385460ff1690565b610b4f611760565b6001600160a01b0316816001600160a01b031614610b9e5760405162461bcd60e51b815260040180806020018281038252602f815260200180614fc4602f913960400191505060405180910390fd5b610b3a8282611f61565b60f954604051631f9838b560e01b815260009182918291600160301b90046001600160a01b031690631f9838b590610be69030908890600401614928565b60206040518083038186803b158015610bfe57600080fd5b505afa158015610c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3691906147b8565b600114610c5e5760405162461bcd60e51b8152600401610c5590614b60565b60405180910390fd5b610c6b8888888888611fca565b925092509250955095509592505050565b60cf5481565b60006106e9610c8f611760565b846108698560346000610ca0611760565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906121e9565b60d054600160b81b900463ffffffff1681565b60ce5481565b600080516020614f7f833981519152610d0281336111ac565b610d1e5760405162461bcd60e51b8152600401610c5590614bd7565b610d26612243565b50565b60655460ff1690565b6105dc81565b6001600160a01b031660009081526033602052604090205490565b60f9546301000000900460020b81565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08610d8e81336111ac565b610daa5760405162461bcd60e51b8152600401610c5590614bd7565b610db2610d29565b15610df7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e809190614727565b505050505091509150610e92816122e3565b610e9d600180612451565b50508560020b8760020b14610ee15760f9805462ffffff1916600289810b62ffffff9081169290921765ffffff00000019166301000000918a900b92909216021790555b600085601e0b13156110235760d0546000601e87900b13906001600160a01b031663128acb08308380610f1a5789601e0b600003610f1f565b89601e0b5b896040518563ffffffff1660e01b8152600401610f3f949392919061496a565b6040805180830381600087803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f90919061456e565b505060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610fe057600080fd5b505afa158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190614727565b509497505050505050505b600061102d61270c565b905060006110396127a4565b90507f2fd4737bac0995700ade358ae308c92f20ee63884dfbe658bf55d2f99f60f077848383611067610721565b6040516110779493929190614c0d565b60405180910390a189156110ac576110ac84611096848d6127106127e1565b6110a3848e6127106127e1565b8a601e0b61288c565b50505050505050505050565b600080516020614f7f8339815191526110d181336111ac565b6110ed5760405162461bcd60e51b8152600401610c5590614bd7565b610d266129c7565b600080516020614f7f83398151915261110e81336111ac565b61112a5760405162461bcd60e51b8152600401610c5590614bd7565b611132610d29565b15611177576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6111888260cc5460cd548787611e86565b60cd5560cc5550505050565b60008281526097602052604081206108729083612a4a565b60008281526097602052604081206108729083612a56565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106cb5780601f106106a0576101008083540402835291602001916106cb565b60f95460020b81565b600081565b60006106e9611240611760565b8461086985604051806060016040528060258152602001614f9f602591396034600061126a611760565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a53565b60006106e96112a8611760565b84846118f6565b600080600080516020614f7f8339815191526112cb81336111ac565b6112e75760405162461bcd60e51b8152600401610c5590614bd7565b60d05460405163a34123a760e01b81526001600160a01b039091169063a34123a79061131b90899089908990600401614aa4565b6040805180830381600087803b15801561133457600080fd5b505af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c919061456e565b60d0546040516309e3d67b60e31b81529295509093506001600160a01b031690634f1eb3d8906113af9030908a908a906001600160801b039081906004016149e6565b6040805180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140091906146a6565b505050935093915050565b60008061141661270c565b91506114206127a4565b9050600060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561147257600080fd5b505afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190614727565b505060f9549495506000948594508493508392506114d991508690600281810b9163010000009004900b612a6b565b929650909450925090506114ed87856121e9565b96506114f986846121e9565b955061151461150d836121346127106127e1565b88906121e9565b965061152f611528826121346127106127e1565b87906121e9565b955050505050509091565b600081815260976020526040812061063190612ac2565b60cb546001600160a01b031681565b6000806000861161157057600080fd5b600061157a610721565b90506115863388612acd565b61159861159161270c565b88836127e1565b92506115a56115916127a4565b91506000806115b48984612451565b90925090506115c385836121e9565b94506115cf84826121e9565b9350878510156115de57600080fd5b868410156115eb57600080fd5b6115f6868686612bc9565b856001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8b888860405161163d93929190614c41565b60405180910390a350505094509492505050565b60d0546001600160a01b0316331461166857600080fd5b611673338585612bc9565b50505050565b600082815260976020526040902060020154611697906104c2611760565b610b9e5760405162461bcd60e51b8152600401808060200182810382526030815260200180614e446030913960400191505060405180910390fd5b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60cc5481565b60d0546001600160a01b0316331461171a57600080fd5b600084131561173a5760ca5461173a906001600160a01b03163386612bff565b60008313156116735760cb54611673906001600160a01b03163385612bff565b3b151590565b3390565b6001600160a01b0383166117a95760405162461bcd60e51b8152600401808060200182810382526024815260200180614f316024913960400191505060405180910390fd5b6001600160a01b0382166117ee5760405162461bcd60e51b8152600401808060200182810382526022815260200180614dd66022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60d05460009081908190819081906001600160a01b031663514ea4bf611877308a8a612c51565b6040518263ffffffff1660e01b81526004016118939190614a78565b60a06040518083038186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e391906146d4565b939b929a50909850965090945092505050565b6001600160a01b03831661193b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f0c6025913960400191505060405180910390fd5b6001600160a01b0382166119805760405162461bcd60e51b8152600401808060200182810382526023815260200180614d626023913960400191505060405180910390fd5b61198b8383836107e6565b6119c881604051806060016040528060268152602001614df8602691396001600160a01b0386166000908152603360205260409020549190611a53565b6001600160a01b0380851660009081526033602052604080822093909355908416815220546119f790826121e9565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611ae25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611aa7578181015183820152602001611a8f565b50505050905090810190601f168015611ad45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600054610100900460ff1680611b035750611b03612ca7565b80611b11575060005460ff16155b611b4c5760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015611b77576000805460ff1961ff0019909116610100171660011790555b600080600080600086806020019051810190611b939190614194565b9450945094509450945060098260020b138015611bb457506107d18260020b125b611bbd57600080fd5b60058163ffffffff16118015611bda57506102588163ffffffff16105b611be357600080fd5b836001600160a01b0316856001600160a01b031610611c145760405162461bcd60e51b8152600401610c5590614ba1565b60c98054336001600160a01b03199182161790915560ca805482166001600160a01b038881169190911790915560cb8054909216908616179055604051630b4c774160e11b8152600090731b02da8cb0d097eb8d57a175b88c7d8b4799750690631698ee8290611c8c90899089908990600401614942565b60206040518083038186803b158015611ca457600080fd5b505afa158015611cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdc9190614178565b90506001600160a01b038116611cf157600080fd5b60d080546001600160a01b0319166001600160a01b03831617905560408051633811936960e01b81529051600091611d8a9133916338119369916004808301926020929190829003018186803b158015611d4a57600080fd5b505afa158015611d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8291906147b8565b600101612cb8565b9050611dd481604051602001611da091906148da565b60405160208183030381529060405282604051602001611dc091906148da565b604051602081830303815290604052612d93565b611ddc612e48565b611de4612ef9565b611dfc600080516020614f7f8339815191528b610b30565b611e267f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088d610b30565b505060d0805463ffffffff909216600160b81b0263ffffffff60b81b1960029490940b62ffffff16600160a01b0262ffffff60a01b1990931692909217929092161790555050811590506107e3576000805461ff00191690555050505050565b6000808315611eb857611e998685612f96565b60ca54909250611eb3906001600160a01b03168886612bff565b611ebc565b8591505b8215611eeb57611ecc8584612f96565b60cb54909150611ee6906001600160a01b03168885612bff565b611eee565b50835b9550959350505050565b6000828152609760205260409020611f109082612ff3565b15610b3a57611f1d611760565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152609760205260409020611f799082613008565b15610b3a57611f86611760565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000806000611fd7610d29565b1561201c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c9546040516367a44ca360e01b81526000916001600160a01b0316906367a44ca39061204d903090600401614914565b60006040518083038186803b15801561206557600080fd5b505afa158015612079573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120a191908101906145e2565b51905060018160048111156120b257fe5b14806120c9575060038160048111156120c757fe5b145b6120e55760405162461bcd60e51b8152600401610c5590614b33565b6120ed610727565b6120f7898961301d565b919550935091508361210857600080fd5b868310156121285760405162461bcd60e51b8152600401610c5590614b18565b858210156121485760405162461bcd60e51b8152600401610c5590614bbc565b82156121665760ca54612166906001600160a01b0316333086613146565b81156121845760cb54612184906001600160a01b0316333085613146565b61218e85856131a0565b846001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68686866040516121d593929190614c41565b60405180910390a350955095509592505050565b600082820183811015610872576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61224b610d29565b612293576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6122c6611760565b604080516001600160a01b039092168252519081900360200190a1565b60d05460408051600280825260608201835263ffffffff600160b81b85041693600160a01b9004810b926000929190602083019080368337019050509050828160008151811061232f57fe5b63ffffffff9092166020928302919091019091015260d05460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90612375908590600401614a23565b60006040518083038186803b15801561238d57600080fd5b505afa1580156123a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123c991908101906143c7565b50905060008463ffffffff16826000815181106123e257fe5b6020026020010151836001815181106123f757fe5b60200260200101510360060b8161240a57fe5b05905083810160020b8660020b1315801561242d575083810360020b8660020b12155b6124495760405162461bcd60e51b8152600401610c5590614bf2565b505050505050565b60f9546000908190600281810b9163010000009004900b826124738383611850565b505050509050600061248f826001600160801b031689896127e1565b90506001600160801b0381166124af576000809550955050505050612705565b60d05460405163a34123a760e01b81526001600160a01b039091169063a34123a7906124e390879087908690600401614aa4565b6040805180830381600087803b1580156124fc57600080fd5b505af1158015612510573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612534919061456e565b60d0546040516309e3d67b60e31b815292985090965060009182916001600160a01b031690634f1eb3d89061257c9030908a908a906001600160801b039081906004016149e6565b6040805180830381600087803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd91906146a6565b6040516001600160801b0392831694509116915088830390888303907fc28ad1de9c0c32e5394ba60323e44d8d9536312236a47231772e448a3e49de42906126189084908490614c33565b60405180910390a18115612677576000612637836105dc6127106127e1565b90508083039250600061264f82611a0b6127106127e1565b60cc5490915061265f90826121e9565b60cc5560ce54612671908284036121e9565b60ce5550505b80156126ce57600061268e826105dc6127106127e1565b9050808203915060006126a682611a0b6127106127e1565b60cd549091506126b690826121e9565b60cd5560cf546126c8908284036121e9565b60cf5550505b6126e36126dc838e8e6127e1565b8b906121e9565b99506126fa6126f3828e8e6127e1565b8a906121e9565b985050505050505050505b9250929050565b60ce5460cc5460ca546040516370a0823160e01b815260009361279f9301916001600160a01b0316906370a0823190612749903090600401614914565b60206040518083038186803b15801561276157600080fd5b505afa158015612775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279991906147b8565b90612f96565b905090565b60cf5460cd5460cb546040516370a0823160e01b815260009361279f9301916001600160a01b0316906370a0823190612749903090600401614914565b6000808060001985870986860292508281109083900303905080612817576000841161280c57600080fd5b508290049050610872565b80841161282357600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60f954600281810b9163010000009004900b60006128bd876128ad85613292565b6128b685613292565b89896135c4565b90506001600160801b038116156129585760d054604051633c8a7d8d60e01b81526001600160a01b0390911690633c8a7d8d906129049030908790879087906004016149a4565b6040805180830381600087803b15801561291d57600080fd5b505af1158015612931573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612955919061456e565b50505b600084131561299257606460058602046129706127a4565b1061298d5760405162461bcd60e51b8152600401610c5590614b83565b61099d565b600084121561099d57606460058702046129aa61270c565b1061099d5760405162461bcd60e51b8152600401610c5590614b83565b6129cf610d29565b15612a14576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122c6611760565b60006108728383613688565b6000610872836001600160a01b0384166136ec565b6000806000806000612a7d8787611850565b6001600160801b039182169750169450919250612ab09150899050612aa189613292565b612aaa89613292565b84613704565b80955081965050505093509350935093565b6000610631826137a0565b6001600160a01b038216612b125760405162461bcd60e51b8152600401808060200182810382526021815260200180614eeb6021913960400191505060405180910390fd5b612b1e826000836107e6565b612b5b81604051806060016040528060228152602001614db4602291396001600160a01b0385166000908152603360205260409020549190611a53565b6001600160a01b038316600090815260336020526040902055603554612b819082612f96565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b8115612be65760ca54612be6906001600160a01b03168484612bff565b80156107e65760cb546107e6906001600160a01b031684835b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107e69084906137a4565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a9093019052815191012090565b6000612cb23061175a565b15905090565b606081612cdd57506040805180820190915260018152600360fc1b6020820152610634565b8160005b8115612cf557600101600a82049150612ce1565b60008167ffffffffffffffff81118015612d0e57600080fd5b506040519080825280601f01601f191660200182016040528015612d39576020820181803683370190505b50859350905060001982015b8315612d8a57600a840660300160f81b82828060019003935081518110612d6857fe5b60200101906001600160f81b031916908160001a905350600a84049350612d45565b50949350505050565b600054610100900460ff1680612dac5750612dac612ca7565b80612dba575060005460ff16155b612df55760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015612e20576000805460ff1961ff0019909116610100171660011790555b612e28613855565b612e3283836138f5565b80156107e6576000805461ff0019169055505050565b600054610100900460ff1680612e615750612e61612ca7565b80612e6f575060005460ff16155b612eaa5760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015612ed5576000805460ff1961ff0019909116610100171660011790555b612edd613855565b612ee56139cd565b8015610d26576000805461ff001916905550565b600054610100900460ff1680612f125750612f12612ca7565b80612f20575060005460ff16155b612f5b5760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015612f86576000805460ff1961ff0019909116610100171660011790555b612f8e613855565b612ee5613855565b600082821115612fed576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610872836001600160a01b038416613a78565b6000610872836001600160a01b038416613ac2565b60008060008061302b610721565b905060008061303861140b565b91509150826000148061304b5750600082115b806130565750600081115b61305c57fe5b82613078578794508693506130718585613b88565b955061313c565b8161309c576130888784836127e1565b9550613095868285613b9f565b935061313c565b806130c0576130ac8884846127e1565b95506130b9868385613b9f565b945061313c565b60006130de6130cf8a84613bd9565b6130d98a86613bd9565b613c32565b9050600081116131005760405162461bcd60e51b8152600401610c5590614afd565b81600182038161310c57fe5b04600101955082600182038161311e57fe5b046001019450816131308286866127e1565b8161313757fe5b049650505b5050509250925092565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526116739085906137a4565b6001600160a01b0382166131fb576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613207600083836107e6565b60355461321490826121e9565b6035556001600160a01b03821660009081526033602052604090205461323a90826121e9565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060008360020b126132a9578260020b6132b1565b8260020b6000035b9050620d89e88111156132ef576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661330357600160801b613315565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613349576ffff97272373d413259a46990580e213a0260801c5b6004821615613368576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613387576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156133a6576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156133c5576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156133e4576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613403576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613423576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613443576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613463576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613483576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156134a3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156134c3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156134e3576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613503576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613524576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613544576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613563576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613580576b048a170391f7dc42444e8fa20260801c5b60008460020b131561359b57806000198161359757fe5b0490505b6401000000008106156135af5760016135b2565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156135e4579293925b846001600160a01b0316866001600160a01b03161161360f57613608858585613c41565b905061367f565b836001600160a01b0316866001600160a01b03161015613671576000613636878686613c41565b90506000613645878986613ca4565b9050806001600160801b0316826001600160801b0316106136665780613668565b815b9250505061367f565b61367c858584613ca4565b90505b95945050505050565b815460009082106136ca5760405162461bcd60e51b8152600401808060200182810382526022815260200180614d406022913960400191505060405180910390fd5b8260000182815481106136d957fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b600080836001600160a01b0316856001600160a01b03161115613725579293925b846001600160a01b0316866001600160a01b03161161375057613749858585613ce9565b9150613797565b836001600160a01b0316866001600160a01b0316101561378957613775868585613ce9565b9150613782858785613d52565b9050613797565b613794858585613d52565b90505b94509492505050565b5490565b60006137f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d959092919063ffffffff16565b8051909150156107e65780806020019051602081101561381857600080fd5b50516107e65760405162461bcd60e51b815260040180806020018281038252602a815260200180614f55602a913960400191505060405180910390fd5b600054610100900460ff168061386e575061386e612ca7565b8061387c575060005460ff16155b6138b75760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015612ee5576000805460ff1961ff0019909116610100171660011790558015610d26576000805461ff001916905550565b600054610100900460ff168061390e575061390e612ca7565b8061391c575060005460ff16155b6139575760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015613982576000805460ff1961ff0019909116610100171660011790555b8251613995906036906020860190613f7b565b5081516139a9906037906020850190613f7b565b506038805460ff1916601217905580156107e6576000805461ff0019169055505050565b600054610100900460ff16806139e657506139e6612ca7565b806139f4575060005460ff16155b613a2f5760405162461bcd60e51b815260040180806020018281038252602e815260200180614e74602e913960400191505060405180910390fd5b600054610100900460ff16158015613a5a576000805460ff1961ff0019909116610100171660011790555b6065805460ff191690558015610d26576000805461ff001916905550565b6000613a8483836136ec565b613aba575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106ed565b5060006106ed565b60008181526001830160205260408120548015613b7e5783546000198083019190810190600090879083908110613af557fe5b9060005260206000200154905080876000018481548110613b1257fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080613b4257fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106ed565b60009150506106ed565b600081831015613b985781610872565b5090919050565b6000613bac8484846127e1565b905060008280613bb857fe5b8486091115610872576000198110613bcf57600080fd5b6001019392505050565b600082613be8575060006106ed565b82820282848281613bf557fe5b04146108725760405162461bcd60e51b8152600401808060200182810382526021815260200180614ea26021913960400191505060405180910390fd5b6000818310613b985781610872565b6000826001600160a01b0316846001600160a01b03161115613c61579192915b6000613c84856001600160a01b0316856001600160a01b0316600160601b6127e1565b905061367f613c9f84838888036001600160a01b03166127e1565b613da4565b6000826001600160a01b0316846001600160a01b03161115613cc4579192915b613ce1613c9f83600160601b8787036001600160a01b03166127e1565b949350505050565b6000826001600160a01b0316846001600160a01b03161115613d09579192915b836001600160a01b0316613d42606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b03166127e1565b81613d4957fe5b04949350505050565b6000826001600160a01b0316846001600160a01b03161115613d72579192915b613ce1826001600160801b03168585036001600160a01b0316600160601b6127e1565b6060613ce18484600085613dba565b806001600160801b038116811461063457600080fd5b606082471015613dfb5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e1e6026913960400191505060405180910390fd5b613e048561175a565b613e55576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310613e935780518252601f199092019160209182019101613e74565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ef5576040519150601f19603f3d011682016040523d82523d6000602084013e613efa565b606091505b5091509150613f0a828286613f15565b979650505050505050565b60608315613f24575081610872565b825115613f345782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315611aa7578181015183820152602001611a8f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613fb15760008555613ff7565b82601f10613fca57805160ff1916838001178555613ff7565b82800160010185558215613ff7579182015b82811115613ff7578251825591602001919060010190613fdc565b50614003929150614007565b5090565b5b808211156140035760008155600101614008565b600061402f61402a84614cb8565b614c76565b905082815283838301111561404357600080fd5b610872836020830184614cda565b805161063481614d06565b600082601f83011261406c578081fd5b8151602061407c61402a83614c9a565b8281528181019085830183850287018401881015614098578586fd5b855b858110156140bf5781516140ad81614d06565b8452928401929084019060010161409a565b5090979650505050505050565b8051801515811461063457600080fd5b60008083601f8401126140ed578182fd5b50813567ffffffffffffffff811115614104578182fd5b60208301915083602082850101111561270557600080fd5b80516005811061063457600080fd5b600082601f83011261413b578081fd5b6108728383516020850161401c565b805161ffff8116811461063457600080fd5b60006020828403121561416d578081fd5b813561087281614d06565b600060208284031215614189578081fd5b815161087281614d06565b600080600080600060a086880312156141ab578081fd5b85516141b681614d06565b60208701519095506141c781614d06565b604087015190945062ffffff811681146141df578182fd5b60608701519093506141f081614d1b565b608087015190925063ffffffff81168114614209578182fd5b809150509295509295909350565b60008060408385031215614229578182fd5b825161423481614d06565b602084015190925067ffffffffffffffff811115614250578182fd5b8301601f81018513614260578182fd5b61426f8582516020840161401c565b9150509250929050565b6000806040838503121561428b578182fd5b823561429681614d06565b915060208301356142a681614d06565b809150509250929050565b600080600080608085870312156142c6578182fd5b84356142d181614d06565b935060208501356142e181614d06565b925060408501356142f181614d06565b9150606085013567ffffffffffffffff81111561430c578182fd5b8501601f8101871361431c578182fd5b803561432a61402a82614cb8565b81815288602083850101111561433e578384fd5b81602084016020830137908101602001929092525092959194509250565b600080600060608486031215614370578081fd5b833561437b81614d06565b9250602084013561438b81614d06565b929592945050506040919091013590565b600080604083850312156143ae578182fd5b82356143b981614d06565b946020939093013593505050565b600080604083850312156143d9578182fd5b825167ffffffffffffffff808211156143f0578384fd5b818501915085601f830112614403578384fd5b8151602061441361402a83614c9a565b82815281810190858301838502870184018b101561442f578889fd5b8896505b8487101561445f5780518060060b811461444b57898afd5b835260019690960195918301918301614433565b5091880151919650909350505080821115614478578283fd5b5061426f8582860161405c565b600060208284031215614496578081fd5b610872826140cc565b6000602082840312156144b0578081fd5b5035919050565b600080604083850312156144c9578182fd5b8235915060208301356142a681614d06565b600080604083850312156144ed578182fd5b50508035926020909101359150565b60006020828403121561450d578081fd5b81356001600160e01b031981168114610872578182fd5b600080600060608486031215614538578081fd5b833561454381614d1b565b9250602084013561455381614d1b565b9150604084013561456381614d2a565b809150509250925092565b60008060408385031215614580578182fd5b505080516020909101519092909150565b600080600080606085870312156145a6578182fd5b8435935060208501359250604085013567ffffffffffffffff8111156145ca578283fd5b6145d6878288016140dc565b95989497509550505050565b6000602082840312156145f3578081fd5b815167ffffffffffffffff8082111561460a578283fd5b9083019060c0828603121561461d578283fd5b61462760c0614c76565b6146308361411c565b81526020830151602082015260408301516040820152606083015182811115614657578485fd5b6146638782860161412b565b60608301525061467560808401614051565b608082015260a08301518281111561468b578485fd5b6146978782860161412b565b60a08301525095945050505050565b600080604083850312156146b8578182fd5b82516146c381614d2a565b60208401519092506142a681614d2a565b600080600080600060a086880312156146eb578283fd5b85516146f681614d2a565b809550506020860151935060408601519250606086015161471681614d2a565b608087015190925061420981614d2a565b600080600080600080600060e0888a031215614741578485fd5b875161474c81614d06565b602089015190975061475d81614d1b565b955061476b6040890161414a565b94506147796060890161414a565b93506147876080890161414a565b925060a088015160ff8116811461479c578283fd5b91506147aa60c089016140cc565b905092959891949750929550565b6000602082840312156147c9578081fd5b5051919050565b600080600080600060a086880312156147e7578283fd5b8535945060208601356147f981614d1b565b9350604086013561480981614d1b565b92506060860135601e81900b811461481f578182fd5b9150608086013561420981614d06565b600080600060608486031215614843578081fd5b8335925060208401359150604084013561456381614d06565b60008060008060808587031215614871578182fd5b843593506020850135925060408501359150606085013561489181614d06565b939692955090935050565b600080600080600060a086880312156148b3578283fd5b85359450602086013593506040860135925060608601359150608086013561420981614d06565b60007153544545525f554e4956335f5641554c545f60701b82528251614907816012850160208701614cda565b9190910160120192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03948516815292151560208401526040830191909152909116606082015260a06080820181905260009082015260c00190565b6001600160a01b03949094168452600292830b6020850152910b60408301526001600160801b0316606082015260a06080820181905260009082015260c00190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b81811015614a6157835163ffffffff1683529284019291840191600101614a3f565b50909695505050505050565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b6000602082528251806020840152614ae9816040850160208701614cda565b601f01601f19169190910160400192915050565b6020808252600190820152604360f81b604082015260600190565b6020808252600190820152600360fc1b604082015260600190565b602080825260139082015272496e76616c6964205661756c7420537461746560681b604082015260600190565b6020808252600990820152681dda1a5d195b1a5cdd60ba1b604082015260600190565b6020808252600490820152630737761760e41b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b6020808252600190820152603160f81b604082015260600190565b6020808252600190820152602960f91b604082015260600190565b6020808252600190820152602b60f91b604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b918252602082015260400190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614c9257fe5b604052919050565b600067ffffffffffffffff821115614cae57fe5b5060209081020190565b600067ffffffffffffffff821115614ccc57fe5b50601f01601f191660200190565b60005b83811015614cf5578181015183820152602001614cdd565b838111156116735750506000910152565b6001600160a01b0381168114610d2657600080fd5b8060020b8114610d2657600080fd5b6001600160801b0381168114610d2657600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564c62a261ff212893ed0a2ac422d821462bb04a4b5c153a746ad6a15108fb4f95145524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220dd8b9b0e3ee013a43069320b88f5d3c26b9c276fa520df5f573c1f2df7e8e89c64736f6c63430007060033496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564