0x60a06040523480156200001157600080fd5b5060405162002cf938038062002cf9833981016040819052620000349162000070565b806001600160a01b0381166200005d57604051636cdc033760e11b815260040160405180910390fd5b6001600160a01b031660805250620000a2565b6000602082840312156200008357600080fd5b81516001600160a01b03811681146200009b57600080fd5b9392505050565b608051612c2d620000cc60003960008181610491015281816106da01526125680152612c2d6000f3fe60806040526004361061016a5760003560e01c8063b3a408b8116100cb578063c7dd32281161007f578063f574029611610059578063f5740296146105f2578063fc63e69e14610612578063fd967f471461063257600080fd5b8063c7dd322814610584578063c94dcf8f146105a6578063d73f3aab146105d257600080fd5b8063b40bf08e116100b0578063b40bf08e146104de578063b84158a4146104fe578063bf9c0e561461056457600080fd5b8063b3a408b81461047f578063b3b34f99146104cb57600080fd5b80636aa99da3116101225780637cbf126b116101075780637cbf126b14610400578063ac1fc22c14610420578063aec96b6e1461045f57600080fd5b80636aa99da3146103c25780637614a751146103e057600080fd5b806308bfa2bf1161015357806308bfa2bf1461035257806322163b8614610369578063522f7386146103a257600080fd5b806301ffc9a71461016f57806303a6ccd0146101a4575b600080fd5b34801561017b57600080fd5b5061018f61018a3660046125fd565b61064f565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506103456101bf366004612658565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152506001600160a01b03821660008181526001602090815260408083206001600160801b038616808552908352818420825160808082018552915463ffffffff80821683526401000000008204811683880190815261ffff680100000000000000008404811685890190815260ff6a010000000000000000000090950494909416151560608087019182529b8b5260038a52888b20978b52968952988790208751610140810189529451831685529051821697840197909752905190961693810193909352905115159482019490945290546bffffffffffffffffffffffff811693820193909352600160c01b8304821660a0820152600160a01b8304821660c0820152600160e01b8304821660e0820152600160801b83048216610100820152600160601b9092041661012082015292915050565b60405161019b9190612691565b34801561035e57600080fd5b5061036761067b565b005b34801561037557600080fd5b50600054600160801b90046001600160801b03165b6040516001600160801b03909116815260200161019b565b3480156103ae57600080fd5b506103676103bd366004612781565b610753565b3480156103ce57600080fd5b506000546001600160801b031661038a565b3480156103ec57600080fd5b506103676103fb3660046127e5565b610965565b34801561040c57600080fd5b5061038a61041b36600461285a565b610ba8565b34801561042c57600080fd5b5061038a61043b366004612904565b6001600160a01b03166000908152600260205260409020546001600160801b031690565b34801561046b57600080fd5b5061036761047a366004612921565b610e19565b34801561048b57600080fd5b506104b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019b565b6103676104d9366004612979565b611024565b3480156104ea57600080fd5b506103676104f9366004612921565b611191565b34801561050a57600080fd5b5061038a6105193660046129d3565b6001600160a01b03841660009081526003602090815260408083206001600160801b03871684529091529020546bffffffffffffffffffffffff1663ffffffff821602949350505050565b34801561057057600080fd5b5061036761057f366004612a14565b611410565b34801561059057600080fd5b50604051634d4a2e3560e01b815260200161019b565b3480156105b257600080fd5b5061018f6105c1366004612a7d565b6001600160a01b0316151592915050565b3480156105de57600080fd5b506103676105ed366004612abd565b61169a565b3480156105fe57600080fd5b5061036761060d366004612904565b6118d0565b34801561061e57600080fd5b5061036761062d366004612afb565b611935565b34801561063e57600080fd5b50604051612710815260200161019b565b600061065a82611b37565b8061067557506001600160e01b03198216634d4a2e3560e01b145b92915050565b600054600160801b90046001600160801b0316801561075057600080546001600160801b03169055604080517f946f7c9e0000000000000000000000000000000000000000000000000000000081529051610750916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163946f7c9e916004808201926020929091908290030181865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a9190612b39565b82611b9f565b50565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190612b39565b6001600160a01b0316336001600160a01b0316141580156108b35750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108449190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612b6f565b155b156108d0576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841660008181526001602090815260408083206001600160801b0388168085529083529281902080546aff0000000000000000000019166a0100000000000000000000881515908102919091179091558151938452918301919091527fe430910c8e4bfa8180b70a0b2aa923b82d6712a1d165e223053ef439a3f86147910160405180910390a250505050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190612b39565b6001600160a01b0316336001600160a01b031614158015610ac55750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190612b6f565b155b15610ae2576040516282b42960e81b815260040160405180910390fd5b8163ffffffff16600003610b095760405163a017714560e01b815260040160405180910390fd5b6001600160a01b03841660008181526003602090815260408083206001600160801b0388168085529083529281902080547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b63ffffffff89169081029190911790915590519081529192917f021f3ca4d64a14574ed4fc7115d2c667604e54efb94b6187ed8117d49c6e475591015b60405180910390a350505050565b60008787878163ffffffff168363ffffffff16108015610bd357508063ffffffff168263ffffffff16105b610bf05760405163536a71af60e01b815260040160405180910390fd5b8563ffffffff168763ffffffff161115610c1d57604051633a964d4760e01b815260040160405180910390fd5b8463ffffffff16600003610c445760405163a017714560e01b815260040160405180910390fd5b610c508d8c8b8b611bbb565b93506000600360008f6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160801b03166001600160801b0316815260200190815260200160002090508c8160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a81600001600c6101000a81548163ffffffff021916908363ffffffff160217905550878160000160146101000a81548163ffffffff021916908363ffffffff160217905550868160000160186101000a81548163ffffffff021916908363ffffffff1602179055508581600001601c6101000a81548163ffffffff021916908363ffffffff160217905550846001600160801b03168e6001600160a01b03167f9a9e0edce33a498fe7d57bfc9e7b46f9a2cd45507d8853c0c18c4c7bd860798c8f8f8f8f8f8f8f8f604051610e009897969594939291906bffffffffffffffffffffffff98909816885263ffffffff96871660208901529486166040880152928516606087015261ffff919091166080860152831660a0850152821660c08401521660e08201526101000190565b60405180910390a3505050509998505050505050505050565b83806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7c9190612b39565b6001600160a01b0316336001600160a01b031614158015610f795750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0a9190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f779190612b6f565b155b15610f96576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083206001600160801b03881684529091529020805463ffffffff600160601b9091048116908516108015610ff35750805463ffffffff808516600160601b90920416105b6110105760405163536a71af60e01b815260040160405180910390fd5b61101c86868686611eab565b505050505050565b6001600160a01b03841660009081526003602090815260408083206001600160801b038716845290915281209061105a826120ee565b825490915061107790600160801b900463ffffffff168583612131565b825463ffffffff91909116600160801b027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9091161782556040517fdc33e6810000000000000000000000000000000000000000000000000000000081523360048201526000906001600160a01b0388169063dc33e68190602401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190612b56565b835490915063ffffffff600160e01b909104811690861682011115611184576040517f1b75136500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5061101c868686866121af565b83806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190612b39565b6001600160a01b0316336001600160a01b0316141580156112f15750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190612b6f565b155b1561130e576040516282b42960e81b815260040160405180910390fd5b8163ffffffff168363ffffffff16111561133b57604051633a964d4760e01b815260040160405180910390fd5b6001600160a01b03851660008181526003602090815260408083206001600160801b0389168085529083529281902080547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff8a81169182027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1692909217600160c01b928a1692830217835583519081529384015293917f6d809c5e613207ec6ca68c0d872f18cf6e493a727c39e150f185b4b6d13be977910160405180910390a3505050505050565b84806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114739190612b39565b6001600160a01b0316336001600160a01b0316141580156115705750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115019190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561154a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156e9190612b6f565b155b1561158d576040516282b42960e81b815260040160405180910390fd5b8383838163ffffffff168363ffffffff161080156115b657508063ffffffff168263ffffffff16105b6115d35760405163536a71af60e01b815260040160405180910390fd5b6001600160a01b03891660009081526003602090815260408083206001600160801b038c168452909152902080547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16600160601b63ffffffff89160217815561163f8a8a8a89610e19565b60405163ffffffff881681526001600160801b038a16906001600160a01b038c16907f33bbd71c3e2f573cc929e30067dcf5801791814427f844484fa25dee910d13529060200160405180910390a350505050505050505050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fd9190612b39565b6001600160a01b0316336001600160a01b0316141580156117fa5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b9190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156117d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f89190612b6f565b155b15611817576040516282b42960e81b815260040160405180910390fd5b8161271061ffff8216111561183f57604051631a52ce6f60e01b815260040160405180910390fd5b6001600160a01b03851660008181526001602090815260408083206001600160801b03891680855290835292819020805469ffff000000000000000019166801000000000000000061ffff8a169081029190911790915590519081529192917fae6d744348a49699fcb91e6a563f2224c0fb27c21053a9218ee827f9d6e698c7910160405180910390a35050505050565b6001600160a01b0381166000908152600260205260409020546001600160801b03168015611931576001600160a01b038216600090815260026020526040902080546fffffffffffffffffffffffffffffffff191690556119318282611b9f565b5050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190612b39565b6001600160a01b0316336001600160a01b031614158015611a955750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a939190612b6f565b155b15611ab2576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841660008181526003602090815260408083206001600160801b0388168085529083529281902080546bffffffffffffffffffffffff19166bffffffffffffffffffffffff881690811790915590519081529192917f7c77af090cbae157811da55b6d8ae1e307a85f5aa1dd2f7a13183279a8c2b4b29101610b9a565b60006001600160e01b031982167f37c74bd800000000000000000000000000000000000000000000000000000000148061067557506001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60008060008084865af16119315763b12d13eb6000526004601cfd5b600084806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c209190612b39565b6001600160a01b0316336001600160a01b031614158015611d1d5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cae9190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b9190612b6f565b155b15611d3a576040516282b42960e81b815260040160405180910390fd5b84848063ffffffff168263ffffffff1610611d685760405163536a71af60e01b815260040160405180910390fd5b8461271061ffff82161115611d9057604051631a52ce6f60e01b815260040160405180910390fd5b600080546001600160a01b038b1682526001602081815260408085206001600160801b0390941680865293909152909220805461ffff8a16680100000000000000000269ffff00000000000000001963ffffffff8d81166401000000000267ffffffffffffffff19909416908f1617929092179190911617815590965090611e19908790612b8c565b600080546fffffffffffffffffffffffffffffffff19166001600160801b0392831617905560408051918816825263ffffffff808c1660208401528a169082015261ffff8816606082015233906001600160a01b038c16907feeb5941fb79bbfe40edd76c2e086e8ccdb0b463fc8ac07416266100b4dfddccf9060800160405180910390a35050505050949350505050565b83806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0e9190612b39565b6001600160a01b0316336001600160a01b03161415801561200b5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9c9190612b56565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120099190612b6f565b155b15612028576040516282b42960e81b815260040160405180910390fd5b82828063ffffffff168263ffffffff16106120565760405163536a71af60e01b815260040160405180910390fd5b6001600160a01b03871660008181526001602090815260408083206001600160801b038b1680855290835292819020805463ffffffff8b811667ffffffffffffffff199092168217640100000000918c16918202179092558251908152928301529192917f13bc03d97cc4e2accb3b8290af069c19619d32a4e9c5219f8580108766fb18fd910160405180910390a350505050505050565b80546000908190600160601b900463ffffffff1642101561211e57508154600160c01b900463ffffffff16610675565b505054600160a01b900463ffffffff1690565b600063ffffffff848116818516019083168111156121a75760006121658463ffffffff168763ffffffff1680821191030290565b6040517fbdc0f4ce00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201529091506024015b60405180910390fd5b949350505050565b6001600160a01b03841660009081526001602090815260408083206001600160801b03871684529091529020805463ffffffff80821691640100000000900416428211156122265760405163296f4f6960e01b815242600482015263ffffffff80841660248301528216604482015260640161219e565b8063ffffffff164211156122635760405163296f4f6960e01b815242600482015263ffffffff80841660248301528216604482015260640161219e565b82546a0100000000000000000000900460ff16156122ad576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001600160a01b03851660009081526003602090815260408083206001600160801b03881684529091528120546bffffffffffffffffffffffff1663ffffffff8516029050806001600160801b0316341015612348576040517ff3ebc3840000000000000000000000000000000000000000000000000000000081523460048201526001600160801b038216602482015260440161219e565b60008061235483612524565b90925090506001600160a01b038516158015906000906123d7575084546001600160a01b038716600090815260026020526040902080546001600160801b0381811661271061ffff68010000000000000000909604959095168883160294909404938401166fffffffffffffffffffffffffffffffff1990911617905592839003925b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820181905263ffffffff8a166024830152906001600160801b03808c16916001600160a01b038e16917f3d73a0206d94d61b7038abcd0eb766a5de22f9844b38a78449054d19a4f1b58a9183916340c10f1991908b169060440160206040518083038185885af1158015612478573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061249d9190612b56565b6040805163ffffffff9283168152918e1660208301526001600160801b038b8116838301528981166060840152871660808301526001600160a01b038d1660a083015287151560c0830152519081900360e00190a4846001600160801b03163411156125185761251833866001600160801b03163403611b9f565b50505050505050505050565b6040517f0d411b210000000000000000000000000000000000000000000000000000000081526001600160801b038216600482015260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630d411b2190602401602060405180830381865afa1580156125af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d39190612bda565b600080546001600160801b03600160801b8083048216850182160291161790559283900393915050565b60006020828403121561260f57600080fd5b81356001600160e01b03198116811461262757600080fd5b9392505050565b6001600160a01b038116811461075057600080fd5b6001600160801b038116811461075057600080fd5b6000806040838503121561266b57600080fd5b82356126768161262e565b9150602083013561268681612643565b809150509250929050565b815163ffffffff168152610140810160208301516126b7602084018263ffffffff169052565b5060408301516126cd604084018261ffff169052565b5060608301516126e1606084018215159052565b50608083015161270160808401826bffffffffffffffffffffffff169052565b5060a083015161271960a084018263ffffffff169052565b5060c083015161273160c084018263ffffffff169052565b5060e083015161274960e084018263ffffffff169052565b506101008381015163ffffffff908116918401919091526101209384015116929091019190915290565b801515811461075057600080fd5b60008060006060848603121561279657600080fd5b83356127a18161262e565b925060208401356127b181612643565b915060408401356127c181612773565b809150509250925092565b803563ffffffff811681146127e057600080fd5b919050565b6000806000606084860312156127fa57600080fd5b83356128058161262e565b9250602084013561281581612643565b9150612823604085016127cc565b90509250925092565b80356bffffffffffffffffffffffff811681146127e057600080fd5b803561ffff811681146127e057600080fd5b60008060008060008060008060006101208a8c03121561287957600080fd5b89356128848161262e565b985061289260208b0161282c565b97506128a060408b016127cc565b96506128ae60608b016127cc565b95506128bc60808b016127cc565b94506128ca60a08b01612848565b93506128d860c08b016127cc565b92506128e660e08b016127cc565b91506128f56101008b016127cc565b90509295985092959850929598565b60006020828403121561291657600080fd5b81356126278161262e565b6000806000806080858703121561293757600080fd5b84356129428161262e565b9350602085013561295281612643565b9250612960604086016127cc565b915061296e606086016127cc565b905092959194509250565b6000806000806080858703121561298f57600080fd5b843561299a8161262e565b935060208501356129aa81612643565b92506129b8604086016127cc565b915060608501356129c88161262e565b939692955090935050565b600080600080608085870312156129e957600080fd5b84356129f48161262e565b93506020850135612a0481612643565b925060408501356129608161262e565b600080600080600060a08688031215612a2c57600080fd5b8535612a378161262e565b94506020860135612a4781612643565b9350612a55604087016127cc565b9250612a63606087016127cc565b9150612a71608087016127cc565b90509295509295909350565b600080600060608486031215612a9257600080fd5b8335612a9d8161262e565b92506020840135612aad81612643565b915060408401356127c18161262e565b600080600060608486031215612ad257600080fd5b8335612add8161262e565b92506020840135612aed81612643565b915061282360408501612848565b600080600060608486031215612b1057600080fd5b8335612b1b8161262e565b92506020840135612b2b81612643565b91506128236040850161282c565b600060208284031215612b4b57600080fd5b81516126278161262e565b600060208284031215612b6857600080fd5b5051919050565b600060208284031215612b8157600080fd5b815161262781612773565b6001600160801b03818116838216019080821115612bd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b600060208284031215612bec57600080fd5b81516126278161264356fea2646970667358221220e6e60a5930261afc75edc0eafc3bcbe6158d2e60715a587e5245b26a11628efb64736f6c6343000810003300000000000000000000000061353b0c3c3aae4e6c9e4e9fcde4a4be4417d2fa