0x60806040523480156200001157600080fd5b50604051620020b4380380620020b48339810160408190526200003491620009fa565b600080546001600160a01b0319166001600160a01b0386161790556200005c83838362000066565b5050505062000dc9565b620151808163ffffffff1611156200009157604051632280d48b60e21b815260040160405180910390fd5b81600080620000a18382620002e8565b509092509050620000b3828262000385565b620000de57856040516312b2728d60e21b8152600401620000d5919062000a79565b60405180910390fd5b6040820151620000f59063ffffffff8616620003ae565b15620001185785604051633beb416d60e11b8152600401620000d5919062000a79565b60006040518060800160405280856001600160a01b03168152602001856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000aa0565b60ff908116825263ffffffff888116602080850191909152600160409485018190526001600160a01b038d8116600090815291835285822087518154898601518a8a01516060808d0151949096166001600160a81b031990931692909217600160a01b9190991681029890981764ffffffffff60a81b1916600160a81b9188169190910260ff60c81b191617600160c81b911515919091021790556002835290859020855160808101875290546001600160601b03811682526c010000000000000000000000008104851693820193909352600160801b830490931694830194909452919091046001600160501b031691810191909152909150620002a28883868685620003c5565b507fd47c7275e633726e4e34f435fd883a2c6bbc8b65a35278390d2ee370756514008888604051620002d692919062000acd565b60405180910390a15050505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260006200033d85620004fb565b92506001600160501b038416158062000362575082516001600160501b038086169116115b156200037e57825162000377908690620005ab565b9150600190505b9250925092565b6000620003928362000679565b8015620003a55750620003a58262000679565b90505b92915050565b600081620003bd844262000b02565b119392505050565b602084015160009081620003da868662000385565b8015620004045750620004028660400151886040015163ffffffff16620003ae60201b60201c565b155b80156200041b575062000419868684620006c9565b155b90508015620004805760006200043f87602001518460ff166200076d60201b60201c565b9050876060015162000459576200045989896001620007de565b62000475898289604001518a600001516200085060201b60201c565b9250620004f2915050565b86606001511562000499576200049988886000620007de565b620004bf846020015163ffffffff16886040015163ffffffff16620003ae60201b60201c565b15620004e25787604051633beb416d60e11b8152600401620000d5919062000a79565b505081516001600160601b031690505b95945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152816001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200057c575060408051601f3d908101601f19168201909252620005799181019062000b49565b60015b6200058657919050565b506001600160501b039093168452506020830152604082015260016060820152919050565b6040805160808101825260008082526020820181905291810182905260608101919091526001600160501b03821615620003a857604051639a6fc8f560e01b81526001600160a01b03841690639a6fc8f590620006119060001986019060040162000bdd565b60a060405180830381865afa9250505080156200064d575060408051601f3d908101601f191682019092526200064a9181019062000b49565b60015b15620003a857506001600160501b03909316845250602083015260408201526001606082015292915050565b60008160600151801562000696575081516001600160501b031615155b8015620006a65750604082015115155b8015620006b7575042826040015111155b8015620003a857505060200151151590565b600080620006e585602001518460ff166200076d60201b60201c565b905060006200070285602001518560ff166200076d60201b60201c565b9050600062000712838362000958565b9050600062000722848462000970565b9050600081670de0b6b3a76400006200073c858362000b02565b62000748919062000bed565b62000754919062000c25565b6706f05b59d3b2000010955050505050505b9392505050565b60006012820362000780575081620003a8565b6012821015620007b8576200079782601262000b02565b620007a490600a62000d6a565b620007b0908462000bed565b9050620003a8565b620007c560128362000b02565b620007d290600a62000d6a565b620007b0908462000c25565b6001600160a01b03831660009081526001602052604090819020805460ff60c81b1916600160c81b84151502179055825190517f027ca86d0a5e661ac88cfa6260082c9353c57cb9e7c95f72fb6cb28033432bd3916200084391869190859062000d84565b60405180910390a1505050565b604080516080810182526001600160601b03808616825263ffffffff80861660208085019182524283168587019081526001600160501b03808916606088019081526001600160a01b038d16600081815260029095529389902097518854955193519151909216600160a01b02600160a01b600160f01b0319918716600160801b0291909116600160801b600160f01b0319939096166c01000000000000000000000000026001600160801b031990951691909616179290921791909116919091179190911790915590517f07529ee41a2aab62dbd5cc22c9f45bd6db300404e0a697d2e80349b69ca3087e906200094a90869062000db9565b60405180910390a250505050565b6000818310620009695781620003a5565b5090919050565b600081831015620009695781620003a5565b60006001600160a01b038216620003a8565b6000620003a88262000982565b620009ac8162000994565b8114620009b857600080fd5b50565b8051620003a881620009a1565b620009ac8162000982565b8051620003a881620009c8565b63ffffffff8116620009ac565b8051620003a881620009e0565b6000806000806080858703121562000a155762000a15600080fd5b600062000a238787620009bb565b945050602062000a3687828801620009d3565b935050604062000a4987828801620009d3565b925050606062000a5c87828801620009ed565b91505092959194509250565b62000a738162000982565b82525050565b60208101620003a8828462000a68565b60ff8116620009ac565b8051620003a88162000a89565b60006020828403121562000ab75762000ab7600080fd5b600062000ac5848462000a93565b949350505050565b6040810162000add828562000a68565b62000766602083018462000a68565b634e487b7160e01b600052601160045260246000fd5b81810381811115620003a857620003a862000aec565b6001600160501b038116620009ac565b8051620003a88162000b18565b80620009ac565b8051620003a88162000b35565b600080600080600060a0868803121562000b665762000b66600080fd5b600062000b74888862000b28565b955050602062000b878882890162000b3c565b945050604062000b9a8882890162000b3c565b935050606062000bad8882890162000b3c565b925050608062000bc08882890162000b28565b9150509295509295909350565b6001600160501b03811662000a73565b60208101620003a8828462000bcd565b81810280821583820485141762000c085762000c0862000aec565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60008262000c375762000c3762000c0f565b500490565b80825b600185111562000c825780860481111562000c5e5762000c5e62000aec565b600185161562000c6d57908102905b800262000c7a8560011c90565b945062000c3f565b94509492505050565b60008262000c9c5750600162000766565b8162000cab5750600062000766565b816001811462000cc4576002811462000ccf5762000d03565b600191505062000766565b60ff84111562000ce35762000ce362000aec565b8360020a91508482111562000cfc5762000cfc62000aec565b5062000766565b5060208310610133831016604e8410600b841016171562000d3b575081810a8381111562000d355762000d3562000aec565b62000766565b62000d4a848484600162000c3c565b9250905081840481111562000d635762000d6362000aec565b0292915050565b6000620003a5600019848462000c8b565b80151562000a73565b6060810162000d94828662000a68565b62000da3602083018562000a68565b62000ac5604083018462000d7b565b8062000a73565b60208101620003a8828462000db2565b6112db8062000dd96000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637cdde506116100665780637cdde5061461010f5780638da5cb5b1461016d578063a2a870a914610175578063ace1798e146101db578063ce6d603f146101ee57600080fd5b80631be5c92f146100a35780633bbfa40d146100c1578063452a9320146100d657806358a6aa88146100eb5780635c975abb146100fa575b600080fd5b6100ab601281565b6040516100b89190610d9a565b60405180910390f35b6100d46100cf366004610df2565b61020e565b005b6100de61025f565b6040516100b89190610e4b565b6100ab6706f05b59d3b2000081565b6101026102dc565b6040516100b89190610e61565b61015d61011d366004610e6f565b6001602052600090815260409020546001600160a01b0381169060ff600160a01b820481169163ffffffff600160a81b82041691600160c81b9091041684565b6040516100b89493929190610ecc565b6100de610354565b6101cb610183366004610e6f565b6002602052600090815260409020546001600160601b0381169063ffffffff600160601b8204811691600160801b8104909116906001600160501b03600160a01b9091041684565b6040516100b89493929190610f1f565b6100ab6101e9366004610e6f565b6103a8565b600054610201906001600160a01b031681565b6040516100b89190610f54565b61021661025f565b6001600160a01b0316336001600160a01b03161461024f5760405162461bcd60e51b815260040161024690610f62565b60405180910390fd5b61025a838383610551565b505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d79190610f98565b905090565b60008060009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d79190610fcc565b60008060009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b6001600160a01b0381166000908152600260209081526040808320815160808101835290546001600160601b0381168252600160601b810463ffffffff90811694830194909452600160801b8104909316918101829052600160a01b9092046001600160501b0316606083015242900361042c57516001600160601b031692915050565b806040015163ffffffff166000036104595782604051638e7a3d6d60e01b81526004016102469190610e4b565b6001600160a01b0380841660009081526001602052604081208054606085015191938392839261048a9216906107ab565b925092509250806104eb57602085015184546104b69163ffffffff90811691600160a81b90041661080b565b156104d65786604051633beb416d60e11b81526004016102469190610e4b565b505091516001600160601b0316949350505050565b6040805160808101825285546001600160a01b038116825260ff600160a01b82048116602084015263ffffffff600160a81b83041693830193909352600160c81b900490911615156060820152610546908890858589610822565b979650505050505050565b620151808163ffffffff16111561057b57604051632280d48b60e21b815260040160405180910390fd5b8160008061058983826107ab565b50915091506105988282610927565b6105b757856040516312b2728d60e21b81526004016102469190610e4b565b6105cb82604001518563ffffffff1661080b565b156105eb5785604051633beb416d60e11b81526004016102469190610e4b565b60006040518060800160405280856001600160a01b03168152602001856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106699190611001565b60ff908116825263ffffffff888116602080850191909152600160409485018190526001600160a01b038d8116600090815291835285822087518154898601518a8a01516060808d0151949096166001600160a81b031990931692909217600160a01b9190991681029890981764ffffffffff60a81b1916600160a81b9188169190910260ff60c81b191617600160c81b911515919091021790556002835290859020855160808101875290546001600160601b0381168252600160601b8104851693820193909352600160801b830490931694830194909452919091046001600160501b0316918101919091529091506107678883868685610822565b507fd47c7275e633726e4e34f435fd883a2c6bbc8b65a35278390d2ee370756514008888604051610799929190611022565b60405180910390a15050505050505050565b6107b3610d5f565b6107bb610d5f565b60006107c685610949565b92506001600160501b03841615806107ea575082516001600160501b038086169116115b15610804576107fd8584600001516109d9565b9150600190505b9250925092565b6000816108188442611053565b1190505b92915050565b6020840151600090816108358686610927565b801561085657506108548660400151886040015163ffffffff1661080b565b155b801561086a5750610868868684610a84565b155b905080156108ba57600061088587602001518460ff16610b0c565b9050876060015161089c5761089c89896001610b6d565b6108b0898289604001518a60000151610bdd565b925061091e915050565b8660600151156108d0576108d088886000610b6d565b6108ee846020015163ffffffff16886040015163ffffffff1661080b565b1561090e5787604051633beb416d60e11b81526004016102469190610e4b565b505081516001600160601b031690505b95945050505050565b600061093283610ced565b8015610942575061094282610ced565b9392505050565b610951610d5f565b816001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156109ab575060408051601f3d908101601f191682019092526109a891810190611091565b60015b6109b457919050565b506001600160501b039093168452506020830152604082015260016060820152919050565b6109e1610d5f565b6001600160501b0382161561081c57604051639a6fc8f560e01b81526001600160a01b03841690639a6fc8f590610a2090600019860190600401611109565b60a060405180830381865afa925050508015610a59575060408051601f3d908101601f19168201909252610a5691810190611091565b60015b1561081c57506001600160501b03909316845250602083015260408201526001606082015292915050565b600080610a9885602001518460ff16610b0c565b90506000610aad85602001518560ff16610b0c565b90506000610abb8383610d39565b90506000610ac98484610d4f565b9050600081670de0b6b3a7640000610ae18583611053565b610aeb9190611117565b610af5919061114c565b6706f05b59d3b20000109998505050505050505050565b600060128203610b1d57508161081c565b6012821015610b4d57610b31826012611053565b610b3c90600a61126e565b610b469084611117565b905061081c565b610b58601283611053565b610b6390600a61126e565b610b46908461114c565b6001600160a01b03831660009081526001602052604090819020805460ff60c81b1916600160c81b84151502179055825190517f027ca86d0a5e661ac88cfa6260082c9353c57cb9e7c95f72fb6cb28033432bd391610bd091869190859061127d565b60405180910390a1505050565b604080516080810182526001600160601b03808616825263ffffffff80861660208085019182524283168587019081526001600160501b03808916606088019081526001600160a01b038d16600081815260029095529389902097518854955193519151909216600160a01b0269ffffffffffffffffffff60a01b19918716600160801b02919091166dffffffffffffffffffffffffffff60801b1993909616600160601b026fffffffffffffffffffffffffffffffff1990951691909616179290921791909116919091179190911790915590517f07529ee41a2aab62dbd5cc22c9f45bd6db300404e0a697d2e80349b69ca3087e90610cdf908690610d9a565b60405180910390a250505050565b600081606001518015610d09575081516001600160501b031615155b8015610d185750604082015115155b8015610d28575042826040015111155b801561081c57505060200151151590565b6000818310610d485781610942565b5090919050565b600081831015610d485781610942565b604051806080016040528060006001600160501b0316815260200160008152602001600081526020016000151581525090565b805b82525050565b6020810161081c8284610d92565b60006001600160a01b03821661081c565b610dc281610da8565b8114610dcd57600080fd5b50565b803561081c81610db9565b63ffffffff8116610dc2565b803561081c81610ddb565b600080600060608486031215610e0a57610e0a600080fd5b6000610e168686610dd0565b9350506020610e2786828701610dd0565b9250506040610e3886828701610de7565b9150509250925092565b610d9481610da8565b6020810161081c8284610e42565b801515610d94565b6020810161081c8284610e59565b600060208284031215610e8457610e84600080fd5b6000610e908484610dd0565b949350505050565b600061081c82610da8565b600061081c82610e98565b610d9481610ea3565b60ff8116610d94565b63ffffffff8116610d94565b60808101610eda8287610eae565b610ee76020830186610eb7565b610ef46040830185610ec0565b61091e6060830184610e59565b6001600160601b038116610d94565b6001600160501b038116610d94565b60808101610f2d8287610f01565b610f3a6020830186610ec0565b610f476040830185610ec0565b61091e6060830184610f10565b6020810161081c8284610eae565b6020808252810161081c81600d81526c27b7363c9033bab0b93234b0b760991b602082015260400190565b805161081c81610db9565b600060208284031215610fad57610fad600080fd5b6000610e908484610f8d565b801515610dc2565b805161081c81610fb9565b600060208284031215610fe157610fe1600080fd5b6000610e908484610fc1565b60ff8116610dc2565b805161081c81610fed565b60006020828403121561101657611016600080fd5b6000610e908484610ff6565b604081016110308285610e42565b6109426020830184610e42565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081c5761081c61103d565b6001600160501b038116610dc2565b805161081c81611066565b80610dc2565b805161081c81611080565b600080600080600060a086880312156110ac576110ac600080fd5b60006110b88888611075565b95505060206110c988828901611086565b94505060406110da88828901611086565b93505060606110eb88828901611086565b92505060806110fc88828901611075565b9150509295509295909350565b6020810161081c8284610f10565b81810280821583820485141761112f5761112f61103d565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60008261115b5761115b611136565b500490565b80825b600185111561119f5780860481111561117e5761117e61103d565b600185161561118c57908102905b80026111988560011c90565b9450611163565b94509492505050565b6000826111b757506001610942565b816111c457506000610942565b81600181146111da57600281146111e457611211565b6001915050610942565b60ff8411156111f5576111f561103d565b8360020a91508482111561120b5761120b61103d565b50610942565b5060208310610133831016604e8410600b8410161715611244575081810a8381111561123f5761123f61103d565b610942565b6112518484846001611160565b925090508184048111156112675761126761103d565b0292915050565b600061094260001984846111a8565b6060810161128b8286610e42565b6112986020830185610e42565b610e906040830184610e5956fea264697066735822122002c0be965c059af548309c7860fbf664b8481cf8117bd0799e412cc82b0ea47c64736f6c63430008130033000000000000000000000000330a51ca232a419c57d126a64e821365f2663c3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006bf14cb0a831078629d993fdebcb182b21a8774c0000000000000000000000000000000000000000000000000000000000015180