0x60e060405234801561001057600080fd5b506040516121b43803806121b483398101604081905261002f9161012f565b600080546001600160a01b0319166001600160a01b0386811691909117909155821660c0526040518190849061006490610106565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f08015801561009b573d6000803e3d6000fd5b506001600160a01b0316608052604051819084906100b890610106565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f0801580156100ef573d6000803e3d6000fd5b506001600160a01b031660a0525061018e92505050565b61156e80610c4683390190565b80516001600160a01b038116811461012a57600080fd5b919050565b6000806000806080858703121561014557600080fd5b61014e85610113565b935061015c60208601610113565b925061016a60408601610113565b9150606085015163ffffffff8116811461018357600080fd5b939692955090935050565b60805160a05160c051610a44610202600039600081816101bc0152818161023201526107a401526000818161015701528181610311015281816104eb0152818161063201526106f901526000818160f5015281816103de015281816104670152818161055d01526108830152610a446000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638955fe8a116100715780638955fe8a14610179578063b81c81c414610181578063c11b968114610189578063c34c78821461019c578063c6758d6b146101a4578063ed33639f146101b757600080fd5b806301ae1920146100b95780630495ed60146100ce57806314693646146100f057806323473de31461012f57806357e871e714610142578063721f4b3b14610152575b600080fd5b6100cc6100c736600461091b565b6101de565b005b6100d66103da565b60405163ffffffff90911681526020015b60405180910390f35b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e7565b600054610117906001600160a01b031681565b435b6040519081526020016100e7565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610144610463565b6100d66104e7565b6100cc610197366004610953565b610547565b6101446106f5565b6100cc6101b236600461091b565b610755565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461022e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a53025d6040518060600160405280866001600160a01b031660001b81526020018581526020016102894390565b90526040516001600160e01b031960e084901b1681526102ac9190600401610975565b602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed91906109a6565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af115801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e91906109bf565b9050827f5d3e96213d4520bdc95a25d628a39768f1a90a2b939894355479596910d179df85435b604080516001600160a01b039093168352602083019190915263ffffffff85169082015260600160405180910390a250505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc7e9c6f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045e91906109bf565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ba70f7576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045e91906109a6565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc7e9c6f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043a573d6000803e3d6000fd5b604051636d9833e360e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636d9833e390602401602060405180830381865afa1580156105ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d091906109ec565b61061c5760405162461bcd60e51b815260206004820152601b60248201527f496e636f7272656374206465706f736974207472656520726f6f7400000000006044820152606401610225565b604051636d9833e360e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636d9833e390602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a591906109ec565b6106f15760405162461bcd60e51b815260206004820152601e60248201527f496e636f7272656374207769746864726177616c207472656520726f6f7400006044820152606401610225565b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ba70f7576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c3573d6000803e3d6000fd5b6000546001600160a01b031633146107a05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610225565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a53025d6040518060600160405280866001600160a01b031660001b81526020018581526020016107fb4390565b90526040516001600160e01b031960e084901b16815261081e9190600401610975565b602060405180830381865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f91906109a6565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af11580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f091906109bf565b9050827fc711bd1d2cdd9c8978324cc83ce34c17f6ada898f8273efeb9585c1312d4ef6785436103a5565b6000806040838503121561092e57600080fd5b82356001600160a01b038116811461094557600080fd5b946020939093013593505050565b6000806040838503121561096657600080fd5b50508035926020909101359150565b60608101818360005b600381101561099d57815183526020928301929091019060010161097e565b50505092915050565b6000602082840312156109b857600080fd5b5051919050565b6000602082840312156109d157600080fd5b815163ffffffff811681146109e557600080fd5b9392505050565b6000602082840312156109fe57600080fd5b815180151581146109e557600080fdfea26469706673582212204c4d42a0c903a79aad14040b8dab25dfe521813afd24d3f9ad37efb166fda56764736f6c6343000813003360a0604052600480546001600160401b03191690553480156200002157600080fd5b506040516200156e3803806200156e833981016040819052620000449162000381565b81816200005133620002a2565b60008263ffffffff1611620000bd5760405162461bcd60e51b815260206004820152602760248201527f5f747265654c6576656c732073686f756c642062652067726561746572207468604482015266616e207a65726f60c81b60648201526084015b60405180910390fd5b60208263ffffffff1610620001205760405162461bcd60e51b815260206004820152602260248201527f5f747265654c6576656c732073686f756c64206265206c657373207468616e20604482015261199960f11b6064820152608401620000b4565b63ffffffff8216608052600180546001600160a01b0319166001600160a01b038316178155600380548083019091557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018190556002805480840182556000919091526000805160206200154e83398151915201819055905b8363ffffffff168163ffffffff1610156200024557620001dd8280620002f2565b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018290556002805491820181556000526000805160206200154e833981519152018190559150806200023c81620003d3565b915050620001bc565b506002620002548280620002f2565b815460018101835560009283526020909220909101556002805463ffffffff851690811062000287576200028762000405565b60009182526020909120015460055550620004689350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60015460408051808201825284815260208101849052905163014cf2b360e51b81526000926001600160a01b03169163299e5660916200033691906004016200041b565b602060405180830381865afa15801562000354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037a91906200044e565b9392505050565b600080604083850312156200039557600080fd5b825163ffffffff81168114620003aa57600080fd5b60208401519092506001600160a01b0381168114620003c857600080fd5b809150509250929050565b600063ffffffff808316818103620003fb57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b60408101818360005b60028110156200044557815183526020928301929091019060010162000424565b50505092915050565b6000602082840312156200046157600080fd5b5051919050565b6080516110a0620004ae60003960008181610195015281816105ba0152818161068d0152818161085f01528181610916015281816109830152610b8501526110a06000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063c2b40ae4116100a2578063ec73295911610071578063ec73295914610262578063ed33639f14610289578063f178e47c1461029c578063f2fde38b146102af578063fc7e9c6f146102c257600080fd5b8063c2b40ae414610221578063cba7a7ac14610234578063cd87a3b414610247578063e82955881461024f57600080fd5b80636d9833e3116100e95780636d9833e3146101b7578063715018a6146101da5780638da5cb5b146101e457806390eeb02b14610209578063ba70f7571461021957600080fd5b80632d287e431461011b57806338bf282e14610148578063414a37ba146101695780634ecf518b14610190575b600080fd5b61012e610129366004610ca9565b6102da565b60405163ffffffff90911681526020015b60405180910390f35b61015b610156366004610cc2565b6102f3565b60405190815260200161013f565b61015b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b61012e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ca6101c5366004610ca9565b61037d565b604051901515815260200161013f565b6101e26103ff565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161013f565b60045461012e9063ffffffff1681565b61015b610413565b61015b61022f366004610ca9565b610439565b6101e2610242366004610ce4565b610450565b61012e600a81565b61015b61025d366004610ca9565b610498565b61015b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6001546101f1906001600160a01b031681565b61015b6102aa366004610ca9565b6104b9565b6101e26102bd366004610d59565b6104c9565b60045461012e90640100000000900463ffffffff1681565b60006102e4610547565b6102ed826105a1565b92915050565b60015460408051808201825284815260208101849052905163014cf2b360e51b81526000926001600160a01b03169163299e5660916103359190600401610d82565b602060405180830381865afa158015610352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103769190610db3565b9392505050565b600081810361038e57506000919050565b60045463ffffffff165b60058163ffffffff16600a81106103b1576103b1610dcc565b015483036103c25750600192915050565b8063ffffffff166000036103d45750600a5b806103de81610df8565b60045490925063ffffffff9081169083160390506103985750600092915050565b610407610547565b61041160006107f9565b565b60045460009060059063ffffffff16600a811061043257610432610dcc565b0154905090565b600581600a811061044957600080fd5b0154905081565b610458610547565b61049482828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061084992505050565b5050565b600381815481106104a857600080fd5b600091825260209091200154905081565b600281815481106104a857600080fd5b6104d1610547565b6001600160a01b03811661053b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610544816107f9565b50565b6000546001600160a01b031633146104115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610532565b600454600090640100000000900463ffffffff166105e07f00000000000000000000000000000000000000000000000000000000000000006002610f29565b63ffffffff168163ffffffff16036106535760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610532565b61065e816001610f46565b6004805463ffffffff929092166401000000000267ffffffff000000001990921691909117905582600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015610780576106ca600286610f80565b63ffffffff1660000361072b5783925060038163ffffffff16815481106106f3576106f3610dcc565b906000526020600020015491508360028263ffffffff168154811061071a5761071a610dcc565b600091825260209091200155610755565b60028163ffffffff168154811061074457610744610dcc565b906000526020600020015492508391505b61075f83836102f3565b935061076c600286610fa3565b94508061077881610fc6565b91505061068b565b50600454600a906107989063ffffffff166001610f46565b6107a29190610f80565b6004805463ffffffff191663ffffffff9290921691821790558390600590600a81106107d0576107d0610dcc565b01556004546107ef90600190640100000000900463ffffffff16610fe9565b9695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600454640100000000900463ffffffff166108857f00000000000000000000000000000000000000000000000000000000000000006002610f29565b63ffffffff1682518263ffffffff1661089e9190611006565b11156109125760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c6520646f65736e2774206861766520656e6f75676820636170616360448201527f69747920746f2061646420737065636966696564206c656176657300000000006064820152608401610532565b60007f000000000000000000000000000000000000000000000000000000000000000063ffffffff1667ffffffffffffffff81111561095357610953611019565b60405190808252806020026020018201604052801561097c578160200160208202803683370190505b50905060007f000000000000000000000000000000000000000000000000000000000000000063ffffffff1667ffffffffffffffff8111156109c0576109c0611019565b6040519080825280602002602001820160405280156109e9578160200160208202803683370190505b50905060005b600185516109fd919061102f565b8163ffffffff161015610b7f576000610a168286610f46565b63ffffffff1690506000868363ffffffff1681518110610a3857610a38610dcc565b6020026020010151905060005b610a50600284611042565b600003610aad576001858263ffffffff1681518110610a7157610a71610dcc565b60200260200101901515908115158152505081868263ffffffff1681518110610a9c57610a9c610dcc565b602002602001018181525050610b69565b6000801b868263ffffffff1681518110610ac957610ac9610dcc565b602002602001015103610b1f5760028163ffffffff1681548110610aef57610aef610dcc565b9060005260206000200154868263ffffffff1681518110610b1257610b12610dcc565b6020026020010181815250505b610b48868263ffffffff1681518110610b3a57610b3a610dcc565b6020026020010151836102f3565b9150610b55600284611056565b925080610b6181610fc6565b915050610a45565b5050508080610b7790610fc6565b9150506109ef565b5060005b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015610c3457818163ffffffff1681518110610bcf57610bcf610dcc565b602002602001015115610c2257828163ffffffff1681518110610bf457610bf4610dcc565b602002602001015160028263ffffffff1681548110610c1557610c15610dcc565b6000918252602090912001555b80610c2c81610fc6565b915050610b83565b50600184518463ffffffff16610c4a9190611006565b610c54919061102f565b6004806101000a81548163ffffffff021916908363ffffffff160217905550610ca28460018651610c85919061102f565b81518110610c9557610c95610dcc565b60200260200101516105a1565b5050505050565b600060208284031215610cbb57600080fd5b5035919050565b60008060408385031215610cd557600080fd5b50508035926020909101359150565b60008060208385031215610cf757600080fd5b823567ffffffffffffffff80821115610d0f57600080fd5b818501915085601f830112610d2357600080fd5b813581811115610d3257600080fd5b8660208260051b8501011115610d4757600080fd5b60209290920196919550909350505050565b600060208284031215610d6b57600080fd5b81356001600160a01b038116811461037657600080fd5b60408101818360005b6002811015610daa578151835260209283019290910190600101610d8b565b50505092915050565b600060208284031215610dc557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821680610e0e57610e0e610de2565b6000190192915050565b600181815b80851115610e55578163ffffffff04821115610e3b57610e3b610de2565b80851615610e4857918102915b93841c9390800290610e1d565b509250929050565b600082610e6c575060016102ed565b81610e79575060006102ed565b8160018114610e8f5760028114610e9957610eca565b60019150506102ed565b60ff841115610eaa57610eaa610de2565b6001841b915063ffffffff821115610ec457610ec4610de2565b506102ed565b5060208310610133831016604e8410600b8410161715610f01575081810a63ffffffff811115610efc57610efc610de2565b6102ed565b610f0b8383610e18565b8063ffffffff04821115610f2157610f21610de2565b029392505050565b600063ffffffff610f3e818516828516610e5d565b949350505050565b63ffffffff818116838216019080821115610f6357610f63610de2565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680610f9757610f97610f6a565b92169190910692915050565b600063ffffffff80841680610fba57610fba610f6a565b92169190910492915050565b600063ffffffff808316818103610fdf57610fdf610de2565b6001019392505050565b63ffffffff828116828216039080821115610f6357610f63610de2565b808201808211156102ed576102ed610de2565b634e487b7160e01b600052604160045260246000fd5b818103818111156102ed576102ed610de2565b60008261105157611051610f6a565b500690565b60008261106557611065610f6a565b50049056fea264697066735822122058771729307a87b211892baee158f3ee81780dcd1ae0731feb8cdd95b28c3ec964736f6c63430008130033405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0000000000000000000000009c7ebc6aa193a55d07ca38824181a8f26dde930a000000000000000000000000a40c47f764c8aa8e993bfac8e93204169779795a00000000000000000000000089d0a748851b69ca26e636864d8088b1dbe9f2200000000000000000000000000000000000000000000000000000000000000014