0x6080604052348015600f57600080fd5b5061212e8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba9a91a51461003b578063d58041b714610062575b600080fd5b6100506000805160206120d983398151915281565b60405190815260200160405180910390f35b610075610070366004611539565b610077565b005b6000806100cd61008a6020850185611593565b61009a6040860160208701611593565b6100aa60e0870160c08801611593565b6100ba60a0880160808901611593565b6100c86101008901896115c0565b61023d565b909250905060006101396100e46020860186611593565b6100f46040870160208801611593565b61010460e0880160c08901611593565b868661011660808b0160608c01611593565b61012660c08c0160a08d01611593565b6101346101208d018d6115e0565b610619565b604080516101408101909152909150610237908061015a6020880188611593565b6001600160a01b0316815260200186602001602081019061017b9190611593565b6001600160a01b0316815260200161019960e0880160c08901611593565b6001600160a01b03908116825260208201879052851660408201526060016101c760a0880160808901611593565b6001600160a01b031681526020016101e56060880160408901611593565b6001600160a01b03168152602001610204610100880160e08901611593565b6001600160a01b03168152602081018490526040016102276101408801886115f6565b61023091611997565b90526109b5565b50505050565b60408051600481526024810182526020810180516001600160e01b0316633f0f816960e21b17905290516000918291829182916001600160a01b038b169161028491611af9565b6000604051808303816000865af19150503d80600081146102c1576040519150601f19603f3d011682016040523d82523d6000602084013e6102c6565b606091505b50915091508161031c5760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f20676574206c617374546f704861744964000000000000604482015260640160405180910390fd5b60e0818060200190518101906103329190611b0b565b61033d906001611b3a565b901b93503363468721a78a6000836103558a80611b53565b61036260208d018d611b53565b604051602401610376959493929190611bc2565b60408051601f198184030181529181526020820180516001600160e01b0316631a64dfad60e01b1790525160e085901b6001600160e01b03191681526103c493929190600090600401611c32565b6020604051808303816000875af11580156103e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104079190611c88565b50604051638a54c52f60e01b81526001600160a01b03891690638a54c52f9061044a908a906000805160206120d98339815191529046908f908b90600401611ca5565b6020604051808303816000875af1158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190611cd8565b60408051600180825281830190925291945060009190816020015b60608152602001906001900390816104a857505060408051600180825281830190925291925060009190602082015b60608152602001906001900390816104d7579050509050604051806040016040528060088152602001671d1bdc12185d125960c21b8152508260008151811061052257610522611cf5565b602002602001018190525061053686610a84565b8160008151811061054957610549611cf5565b6020026020010181905250336001600160a01b031663468721a78960008585604051602401610579929190611d67565b60408051601f198184030181529181526020820180516001600160e01b031663579374b960e11b1790525160e085901b6001600160e01b03191681526105c793929190600090600401611c32565b6020604051808303816000875af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611c88565b50505050509550959350505050565b60405162460ea360e61b8152600481018690526000906001600160a01b038a1690631183a8c090602401602060405180830381865afa158015610660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106849190611b0b565b90503363468721a78a60008961069a8780611b53565b60018c806106ae60608d0160408e01611d95565b6106bb60208e018e611b53565b6040516024016106d399989796959493929190611db2565b60408051601f198184030181529181526020820180516001600160e01b0316635829492f60e11b1790525160e085901b6001600160e01b031916815261072193929190600090600401611c32565b6020604051808303816000875af1158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190611c88565b50604051638a54c52f60e01b81526001600160a01b03891690638a54c52f906107a7908a906000805160206120d98339815191529046908f908890600401611ca5565b6020604051808303816000875af11580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea9190611cd8565b506000846001600160a01b031663f1ab873c856040518060200160405280600081525060405160240161081d9190611e17565b60408051601f19818403018152918152602080830180516001600160e01b031663a4f9edbf60e01b179052905161086f916000805160206120d983398151915291899101918252602082015260400190565b60408051601f198184030181529082905280516020909101206001600160e01b031960e086901b1682526108a7939291600401611e2a565b6020604051808303816000875af11580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190611cd8565b604051602481018490526001600160a01b0382166044820152909150339063468721a7908c9060009060640160408051601f198184030181529181526020820180516001600160e01b031663320fbbb760e11b1790525160e085901b6001600160e01b031916815261096493929190600090600401611c32565b6020604051808303816000875af1158015610983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a79190611c88565b505098975050505050505050565b60005b81610120015151811015610a8057600082610120015182815181106109df576109df611cf5565b602002602001015190506000610a1784600001518560c001518660e00151876060015188608001518961010001518860800151610b8c565b90506000610a35856000015186610100015185858960800151610cf3565b90506000610a5b8660200151876040015188600001518760800151886000015187611025565b9050610a718460600151828860a00151856110cf565b846001019450505050506109b8565b5050565b606081600003610aab5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610ad55780610abf81611e5e565b9150610ace9050600a83611e8d565b9150610aaf565b6000816001600160401b03811115610aef57610aef611646565b6040519080825280601f01601f191660200182016040528015610b19576020820181803683370190505b5090505b8415610b8457610b2e600183611ea1565b9150610b3b600a86611eb4565b610b46906030611b3a565b60f81b818381518110610b5b57610b5b611cf5565b60200101906001600160f81b031916908160001a905350610b7d600a86611e8d565b9450610b1d565b949350505050565b60006001600160801b03821615610ce557866001600160a01b0316632f7fb7b6878a6001600160a01b0316631183a8c0876040518263ffffffff1660e01b8152600401610bdb91815260200190565b602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c9190611b0b565b886000604051602001610c39929190918252602082015260400190565b60408051601f198184030181528282526001600160801b0389166020840152910160408051601f19818403018152908290526001600160e01b031960e087901b168252610c9b949392916000805160206120d983398151915290600401611ec8565b6020604051808303816000875af1158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde9190611cd8565b9050610ce8565b50825b979650505050505050565b60405162460ea360e61b81526004810185905260009081906001600160a01b03881690631183a8c090602401602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190611b0b565b9050336001600160a01b031663468721a78860008989602001518a60a001518a8a8d60c001518e60400151604051602401610da19796959493929190611f14565b60408051601f198184030181529181526020820180516001600160e01b0316635829492f60e11b1790525160e085901b6001600160e01b0319168152610def93929190600090600401611c32565b6020604051808303816000875af1158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e329190611c88565b5060808501516001600160801b031615610f5d5760408051600180825281830190925260009160208083019080368337019050509050856000015181600081518110610e8057610e80611cf5565b60200260200101906001600160a01b031690816001600160a01b031681525050336001600160a01b031663468721a7866000896080015185604051602401610ec9929190611f78565b60408051601f198184030181529181526020820180516001600160e01b0316634a231cef60e01b1790525160e085901b6001600160e01b0319168152610f1793929190600090600401611c32565b6020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190611c88565b50505b8451604051602481018390526001600160a01b039091166044820152339063468721a790899060009060640160408051601f198184030181529181526020820180516001600160e01b031663320fbbb760e11b1790525160e085901b6001600160e01b0319168152610fd793929190600090600401611c32565b6020604051808303816000875af1158015610ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101a9190611c88565b509695505050505050565b60006001600160801b0384161561103d5750816110c5565b604051638a54c52f60e01b81526001600160a01b03881690638a54c52f9061107f9089906000805160206120d98339815191529046908b908990600401611ca5565b6020604051808303816000875af115801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190611cd8565b90505b9695505050505050565b60005b84518110156115325760008582815181106110ef576110ef611cf5565b60200260200101519050336001600160a01b031663468721a78260400151600084600001518560a001516040516024016111479291906001600160a01b039290921682526001600160801b0316602082015260400190565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b1790525160e085901b6001600160e01b031916815261119593929190600090600401611c32565b6020604051808303816000875af11580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d89190611c88565b50600081600001516001600160a01b0316631e99d5696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112419190611b0b565b9050336001600160a01b031663468721a78360000151600060405180610100016040528087602001516001600160a01b031681526020018b6001600160a01b031681526020018760a001516001600160801b0316815260200187604001516001600160a01b031681526020018760c00151151581526020018760e00151151581526020018760600151815260200187608001518152506040516024016112e79190611fcd565b60408051601f198184030181529181526020820180516001600160e01b03166353b1572760e01b1790525160e085901b6001600160e01b031916815261133593929190600090600401611c32565b6020604051808303816000875af1158015611354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113789190611c88565b50604080516001808252818301909252600091816020015b606081526020019060019003908161139057505060408051600180825281830190925291925060009190602082015b60608152602001906001900390816113bf5790505090506040518060400160405280600f81526020016e1a185d1259151bd4dd1c99585b5259608a1b8152508260008151811061141157611411611cf5565b602002602001018190525061142586610a84565b61142e84610a84565b60405160200161143f92919061209c565b6040516020818303038152906040528160008151811061146157611461611cf5565b6020026020010181905250336001600160a01b031663468721a78860008585604051602401611491929190611d67565b60408051601f198184030181529181526020820180516001600160e01b031663579374b960e11b1790525160e085901b6001600160e01b03191681526114df93929190600090600401611c32565b6020604051808303816000875af11580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115229190611c88565b50846001019450505050506110d2565b5050505050565b60006020828403121561154b57600080fd5b81356001600160401b0381111561156157600080fd5b8201610160818503121561157457600080fd5b9392505050565b6001600160a01b038116811461159057600080fd5b50565b6000602082840312156115a557600080fd5b81356115748161157b565b80356115bb8161157b565b919050565b60008235603e198336030181126115d657600080fd5b9190910192915050565b60008235605e198336030181126115d657600080fd5b6000808335601e1984360301811261160d57600080fd5b8301803591506001600160401b0382111561162757600080fd5b6020019150600581901b360382131561163f57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b038111828210171561167f5761167f611646565b60405290565b60405160e081016001600160401b038111828210171561167f5761167f611646565b604051601f8201601f191681016001600160401b03811182821017156116cf576116cf611646565b604052919050565b60006001600160401b038211156116f0576116f0611646565b5060051b60200190565b600082601f83011261170b57600080fd5b81356001600160401b0381111561172457611724611646565b611737601f8201601f19166020016116a7565b81815284602083860101111561174c57600080fd5b816020850160208301376000918101602001919091529392505050565b803564ffffffffff811681146115bb57600080fd5b60006060828403121561179057600080fd5b604051606081016001600160401b03811182821017156117b2576117b2611646565b6040529050806117c183611769565b81526117cf60208401611769565b60208201526117e060408401611769565b60408201525092915050565b6000604082840312156117fe57600080fd5b604080519081016001600160401b038111828210171561182057611820611646565b60405290508082356118318161157b565b8152602092830135920191909152919050565b80356001600160801b03811681146115bb57600080fd5b801515811461159057600080fd5b80356115bb8161185b565b600082601f83011261188557600080fd5b8135611898611893826116d7565b6116a7565b80828252602082019150602061016084028601019250858311156118bb57600080fd5b602085015b838110156119795761016081880312156118d957600080fd5b6118e161165c565b6118ea826115b0565b81526118f8602083016115b0565b6020820152611909604083016115b0565b604082015261191b886060840161177e565b606082015261192d8860c084016117ec565b608082015261193f6101008301611844565b60a08201526119516101208301611869565b60c08201526119636101408301611869565b60e08201528352602090920191610160016118c0565b5095945050505050565b803563ffffffff811681146115bb57600080fd5b60006119a5611893846116d7565b8381526020810190600585901b8401368111156119c157600080fd5b845b81811015611aca5780356001600160401b038111156119e157600080fd5b860160e03682900312156119f457600080fd5b6119fc611685565b611a05826115b0565b815260208201356001600160401b03811115611a2057600080fd5b611a2c368285016116fa565b60208301525060408201356001600160401b03811115611a4b57600080fd5b611a57368285016116fa565b60408301525060608201356001600160401b03811115611a7657600080fd5b611a8236828501611874565b606083015250611a9460808301611844565b6080820152611aa560a08301611983565b60a0820152611ab660c08301611869565b60c0820152855250602093840193016119c3565b509095945050505050565b60005b83811015611af0578181015183820152602001611ad8565b50506000910152565b600082516115d6818460208701611ad5565b600060208284031215611b1d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611b4d57611b4d611b24565b92915050565b6000808335601e19843603018112611b6a57600080fd5b8301803591506001600160401b03821115611b8457600080fd5b60200191503681900382131561163f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0386168152606060208201819052600090611be79083018688611b99565b8281036040840152611bfa818587611b99565b98975050505050505050565b60008151808452611c1e816020860160208601611ad5565b601f01601f19169290920160200192915050565b60018060a01b0385168152836020820152608060408201526000611c596080830185611c06565b905060028310611c7957634e487b7160e01b600052602160045260246000fd5b82606083015295945050505050565b600060208284031215611c9a57600080fd5b81516115748161185b565b6001600160a01b039586168152602081019490945260408401929092529092166060820152608081019190915260a00190565b600060208284031215611cea57600080fd5b81516115748161157b565b634e487b7160e01b600052603260045260246000fd5b600082825180855260208501945060208160051b8301016020850160005b83811015611d5b57601f19858403018852611d45838351611c06565b6020988901989093509190910190600101611d29565b50909695505050505050565b604081526000611d7a6040830185611d0b565b8281036020840152611d8c8185611d0b565b95945050505050565b600060208284031215611da757600080fd5b81356115748161185b565b89815260e060208201526000611dcc60e083018a8c611b99565b60ff891660408401526001600160a01b0388811660608501528716608084015285151560a084015282810360c0840152611e07818587611b99565b9c9b505050505050505050505050565b6020815260006115746020830184611c06565b6001600160a01b0384168152606060208201819052600090611e4e90830185611c06565b9050826040830152949350505050565b600060018201611e7057611e70611b24565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611e9c57611e9c611e77565b500490565b81810381811115611b4d57611b4d611b24565b600082611ec357611ec3611e77565b500690565b60018060a01b038616815284602082015260a060408201526000611eef60a0830186611c06565b8281036060840152611f018186611c06565b9150508260808301529695505050505050565b87815260e060208201526000611f2d60e0830189611c06565b63ffffffff881660408401526001600160a01b0387811660608501528616608084015284151560a084015282810360c0840152611f6a8185611c06565b9a9950505050505050505050565b6000604082016001600160801b03851683526040602084015280845180835260608501915060208601925060005b81811015611d5b5783516001600160a01b0316835260209384019390920191600101611fa6565b81516001600160a01b0390811682526020808401518216908301526040808401516001600160801b03169083015260608084015191821690830152610160820190506080830151612022608084018215159052565b5060a083015161203660a084018215159052565b5060c083015161207560c084018264ffffffffff815116825264ffffffffff602082015116602083015264ffffffffff60408201511660408301525050565b5060e0929092015180516001600160a01b0316610120830152602001516101409091015290565b600083516120ae818460208801611ad5565b601d60f91b90830190815283516120cc816001840160208801611ad5565b0160010194935050505056fe5d0e6ce4fd951366cc55da93f6e79d8b81483109d79676a04bcc2bed6a4b5072a26469706673582212200934c93692d281e9d89ed2e17022e289297dd78e723d3ba32c6645f05d3b8df864736f6c634300081c0033