0x608060405234801561001057600080fd5b5060405161001d9061005f565b604051809103906000f080158015610039573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905561006c565b610ff380610c7883390190565b610bfd8061007b6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631dc95aac146100515780635922e346146100775780639884e8011461008c578063c3fbaa25146100b7575b600080fd5b61006461005f3660046108ea565b6100ca565b6040519081526020015b60405180910390f35b61008a610085366004610914565b6100fb565b005b61009f61009a36600461099a565b610309565b6040516001600160a01b03909116815260200161006e565b61008a6100c53660046108ea565b6103b3565b600160205281600052604060002081815481106100e657600080fd5b90600052602060002001600091509150505481565b808061015a5760405162461bcd60e51b8152602060048201526024808201527f5f657263373231416d6f756e74206d7573742067726561746572207468616e206044820152637a65726f60e01b60648201526084015b60405180910390fd5b600061016585610309565b90506001600160a01b0381163b61017f5761017f8561066d565b60005b8281101561027a57856001600160a01b03166323b872dd33308888868181106101ad576101ad6109b5565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561020457600080fd5b505af1158015610218573d6000803e3d6000fd5b505050506001600160a01b0386166000908152600160205260409020858583818110610246576102466109b5565b8354600181018555600094855260209485902091909402929092013591909201555080610272816109e1565b915050610182565b506001600160a01b0381166340c10f19336102a4856ec097ce7bc90715b34b9f10000000006109fa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156102ea57600080fd5b505af11580156102fe573d6000803e3d6000fd5b505050505050505050565b6040516bffffffffffffffffffffffff19606083901b166020820152600090819060340160408051808303601f190181529082905280516020909101206000543060388401526f5af43d82803e903d91602b57fd5bf3ff60248401526001600160a01b03166014830152733d602d80600a3d3981f3363d3d373d3d3d363d738252605882018190526037600c830120607883015260556043909201919091209091505b9392505050565b6ec097ce7bc90715b34b9f10000000008110156104275760405162461bcd60e51b815260206004820152602c60248201527f5f6572633230416d6f756e74206d7573742067726561746572206f722065717560448201526b30b6103a3430b71018b2999b60a11b6064820152608401610151565b600061043283610309565b60405163079cc67960e41b8152336004820152602481018490529091506001600160a01b038216906379cc679090604401600060405180830381600087803b15801561047d57600080fd5b505af1158015610491573d6000803e3d6000fd5b5050505060006ec097ce7bc90715b34b9f1000000000836104b29190610a11565b905060005b8181101561060a576001600160a01b038516600081815260016020526040902080546323b872dd913091339190869081106104f4576104f46109b5565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b5050506001600160a01b03861660009081526001602081905260409091208054909250839161059191610a33565b61059b9190610a33565b815481106105ab576105ab6109b5565b906000526020600020015460016000876001600160a01b03166001600160a01b0316815260200190815260200160002082815481106105ec576105ec6109b5565b60009182526020909120015580610602816109e1565b9150506104b7565b5060005b81811015610666576001600160a01b038516600090815260016020526040902080548061063d5761063d610a46565b60019003818190600052602060002001600090559055808061065e906109e1565b91505061060e565b5050505050565b60408051606083901b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120600080546106bc906001600160a01b03168361082b565b9050806001600160a01b0316634cd88b76846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561070b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107339190810190610a96565b6040516020016107439190610b43565b604051602081830303815290604052856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190610a96565b6040516020016107c89190610b43565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016107f4929190610b99565b600060405180830381600087803b15801561080e57600080fd5b505af1158015610822573d6000803e3d6000fd5b50505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166108c85760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610151565b92915050565b80356001600160a01b03811681146108e557600080fd5b919050565b600080604083850312156108fd57600080fd5b610906836108ce565b946020939093013593505050565b60008060006040848603121561092957600080fd5b610932846108ce565b9250602084013567ffffffffffffffff8082111561094f57600080fd5b818601915086601f83011261096357600080fd5b81358181111561097257600080fd5b8760208260051b850101111561098757600080fd5b6020830194508093505050509250925092565b6000602082840312156109ac57600080fd5b6103ac826108ce565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016109f3576109f36109cb565b5060010190565b80820281158282048414176108c8576108c86109cb565b600082610a2e57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156108c8576108c86109cb565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610a8d578181015183820152602001610a75565b50506000910152565b600060208284031215610aa857600080fd5b815167ffffffffffffffff80821115610ac057600080fd5b818401915084601f830112610ad457600080fd5b815181811115610ae657610ae6610a5c565b604051601f8201601f19908116603f01168101908382118183101715610b0e57610b0e610a5c565b81604052828152876020848701011115610b2757600080fd5b610b38836020830160208801610a72565b979650505050505050565b60008251610b55818460208701610a72565b65102a37b5b2b760d11b920191825250600601919050565b60008151808452610b85816020860160208601610a72565b601f01601f19169290920160200192915050565b604081526000610bac6040830185610b6d565b8281036020840152610bbe8185610b6d565b9594505050505056fea264697066735822122049553c5a3ae09bbeaf50675fff2d7a536ff7c297c95ac5c392b14da5e45f8c1264736f6c6343000811003360a06040523480156200001157600080fd5b506040805160208082018352600080835283519182019093529182529060036200003c8382620000fd565b5060046200004b8282620000fd565b50503360805250620001c9565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200008357607f821691505b602082108103620000a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f857600081815260208120601f850160051c81016020861015620000d35750805b601f850160051c820191505b81811015620000f457828155600101620000df565b5050505b505050565b81516001600160401b0381111562000119576200011962000058565b62000131816200012a84546200006e565b84620000aa565b602080601f831160018114620001695760008415620001505750858301515b600019600386901b1c1916600185901b178555620000f4565b600085815260208120601f198616915b828110156200019a5788860151825594840194600190910190840162000179565b5085821015620001b95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051610e07620001ec6000396000818161032e01526103c20152610e076000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c681161009757806395d89b411161006657806395d89b41146101f9578063a457c2d714610201578063a9059cbb14610214578063dd62ed3e1461022757600080fd5b806342966c68146101975780634cd88b76146101aa57806370a08231146101bd57806379cc6790146101e657600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461016f57806340c10f191461018257600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b61010261023a565b60405161010f9190610a5f565b60405180910390f35b61012b610126366004610ac9565b6102cc565b604051901515815260200161010f565b6002545b60405190815260200161010f565b61012b61015b366004610af3565b6102e6565b6040516012815260200161010f565b61012b61017d366004610ac9565b61030a565b610195610190366004610ac9565b61032c565b005b6101956101a5366004610b2f565b6103b3565b6101956101b8366004610b91565b6103c0565b61013f6101cb366004610bfd565b6001600160a01b031660009081526020819052604090205490565b6101956101f4366004610ac9565b610456565b61010261046b565b61012b61020f366004610ac9565b61047a565b61012b610222366004610ac9565b6104f5565b61013f610235366004610c1f565b610503565b60606005805461024990610c52565b80601f016020809104026020016040519081016040528092919081815260200182805461027590610c52565b80156102c25780601f10610297576101008083540402835291602001916102c2565b820191906000526020600020905b8154815290600101906020018083116102a557829003601f168201915b5050505050905090565b6000336102da81858561052e565b60019150505b92915050565b6000336102f4858285610653565b6102ff8585856106cd565b506001949350505050565b6000336102da81858561031d8383610503565b6103279190610c8c565b61052e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146103a55760405162461bcd60e51b815260206004820152601960248201527843616c6c6572206973206e6f742074686520666163746f727960381b60448201526064015b60405180910390fd5b6103af8282610871565b5050565b6103bd3382610930565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104345760405162461bcd60e51b815260206004820152601960248201527843616c6c6572206973206e6f742074686520666163746f727960381b604482015260640161039c565b6005610441848683610d11565b50600661044f828483610d11565b5050505050565b610461823383610653565b6103af8282610930565b60606006805461024990610c52565b600033816104888286610503565b9050838110156104e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161039c565b6102ff828686840361052e565b6000336102da8185856106cd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105905760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161039c565b6001600160a01b0382166105f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161039c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061065f8484610503565b905060001981146106c757818110156106ba5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161039c565b6106c7848484840361052e565b50505050565b6001600160a01b0383166107315760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161039c565b6001600160a01b0382166107935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161039c565b6001600160a01b0383166000908152602081905260409020548181101561080b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161039c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106c7565b6001600160a01b0382166108c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161039c565b80600260008282546108d99190610c8c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109905760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161039c565b6001600160a01b03821660009081526020819052604090205481811015610a045760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161039c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610646565b505050565b600060208083528351808285015260005b81811015610a8c57858101830151858201604001528201610a70565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610ac457600080fd5b919050565b60008060408385031215610adc57600080fd5b610ae583610aad565b946020939093013593505050565b600080600060608486031215610b0857600080fd5b610b1184610aad565b9250610b1f60208501610aad565b9150604084013590509250925092565b600060208284031215610b4157600080fd5b5035919050565b60008083601f840112610b5a57600080fd5b50813567ffffffffffffffff811115610b7257600080fd5b602083019150836020828501011115610b8a57600080fd5b9250929050565b60008060008060408587031215610ba757600080fd5b843567ffffffffffffffff80821115610bbf57600080fd5b610bcb88838901610b48565b90965094506020870135915080821115610be457600080fd5b50610bf187828801610b48565b95989497509550505050565b600060208284031215610c0f57600080fd5b610c1882610aad565b9392505050565b60008060408385031215610c3257600080fd5b610c3b83610aad565b9150610c4960208401610aad565b90509250929050565b600181811c90821680610c6657607f821691505b602082108103610c8657634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102e057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610a5a57600081815260208120601f850160051c81016020861015610cea5750805b601f850160051c820191505b81811015610d0957828155600101610cf6565b505050505050565b67ffffffffffffffff831115610d2957610d29610cad565b610d3d83610d378354610c52565b83610cc3565b6000601f841160018114610d715760008515610d595750838201355b600019600387901b1c1916600186901b17835561044f565b600083815260209020601f19861690835b82811015610da25786850135825560209485019460019092019101610d82565b5086821015610dbf5760001960f88860031b161c19848701351681555b505060018560011b018355505050505056fea26469706673582212206ee5ebd14a32e37e32f07ad9f86232561997d90250d4763217a8d7219687fc3364736f6c63430008110033