0x60806040526000600260146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200220d3803806200220d833981810160405281019062000052919062000124565b8160008190555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038190555050506200016b565b600080fd5b6000819050919050565b620000c381620000ae565b8114620000cf57600080fd5b50565b600081519050620000e381620000b8565b92915050565b6000819050919050565b620000fe81620000e9565b81146200010a57600080fd5b50565b6000815190506200011e81620000f3565b92915050565b600080604083850312156200013e576200013d620000a9565b5b60006200014e85828601620000d2565b925050602062000161858286016200010d565b9150509250929050565b612092806200017b6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638edae1fc116100a2578063d606593511610071578063d6065935146102cd578063d7f3394d146102fe578063dff7156014610308578063e4723ecf14610326578063e5225381146103565761010b565b80638edae1fc146102455780638f84aa0914610275578063964f10d714610293578063a1135690146102af5761010b565b806320351c01116100de57806320351c01146101bf578063247155ff146101db5780632eb4a7ab1461020b57806356e1887d146102295761010b565b806302643f0714610110578063089308b5146101425780630dbe515414610173578063150b7a021461018f575b600080fd5b61012a60048036038101906101259190611780565b610360565b604051610139939291906117d5565b60405180910390f35b61015c60048036038101906101579190611780565b6103aa565b60405161016a92919061180c565b60405180910390f35b61018d60048036038101906101889190611780565b6103ee565b005b6101a960048036038101906101a491906119a7565b61081e565b6040516101b69190611a65565b60405180910390f35b6101d960048036038101906101d49190611ab6565b610832565b005b6101f560048036038101906101f09190611b43565b6108fc565b6040516102029190611bbe565b60405180910390f35b61021361097b565b6040516102209190611be8565b60405180910390f35b610243600480360381019061023e9190611c03565b610981565b005b61025f600480360381019061025a9190611780565b610a7c565b60405161026c9190611bbe565b60405180910390f35b61027d610a9c565b60405161028a9190611c56565b60405180910390f35b6102ad60048036038101906102a89190611c71565b610ac2565b005b6102b7611113565b6040516102c49190611bbe565b60405180910390f35b6102e760048036038101906102e29190611ce5565b611126565b6040516102f592919061180c565b60405180910390f35b61030661117a565b005b61031061122d565b60405161031d9190611d12565b60405180910390f35b610340600480360381019061033b9190611780565b611233565b60405161034d9190611d12565b60405180910390f35b61035e61124b565b005b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610475576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054421061081b5760005b600480549050811015610819576000600482815481106104a4576104a3611d2d565b5b90600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160361055d5750610806565b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16636352211e83602001516040518263ffffffff1660e01b81526004016105b59190611d12565b602060405180830381865afa1580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f69190611d71565b73ffffffffffffffffffffffffffffffffffffffff16146106175750610806565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361076a57806000015173ffffffffffffffffffffffffffffffffffffffff166342842e0e600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff16636352211e85602001516040518263ffffffff1660e01b81526004016106cf9190611d12565b602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611d71565b84602001516040518463ffffffff1660e01b815260040161073393929190611d9e565b600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50505050610804565b806000015173ffffffffffffffffffffffffffffffffffffffff166342842e0e600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168584602001516040518463ffffffff1660e01b81526004016107d193929190611d9e565b600060405180830381600087803b1580156107eb57600080fd5b505af11580156107ff573d6000803e3d6000fd5b505050505b505b808061081190611e04565b915050610481565b505b50565b600063150b7a0260e01b9050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507f6171a6d5426cbdaee02de82a4d6e09f890f9939517906b6132812dd61731ed166003546040516108f19190611be8565b60405180910390a150565b6000610972838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600354866040516020016109579190611e94565b6040516020818303038152906040528051906020012061160b565b90509392505050565b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a08576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3083856040518463ffffffff1660e01b8152600401610a4593929190611d9e565b600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b83600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b29576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84848173ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b8152600401610b649190611d12565b602060405180830381865afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba59190611d71565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610c8557508173ffffffffffffffffffffffffffffffffffffffff1663081812fc826040518263ffffffff1660e01b8152600401610c149190611d12565b602060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c559190611d71565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610cbc576040517f59dc379f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003548585610d33828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508433604051602001610d189190611e94565b6040516020818303038152906040528051906020012061160b565b610d69576040517fc8ac23c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260149054906101000a900460ff1615610db0576040517f3f05755a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e34576040517f96c349d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff166342842e0e33308c6040518463ffffffff1660e01b8152600401610e7193929190611d9e565b600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50505050600460405180604001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101555050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f9c90611e04565b919050555060405180606001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001600480549050815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201559050506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2a1d98a0abeea91ecab531693af8f7aba7dc6fe5a0acd5416137fe0b654c09018a338b6040516110ff93929190611d9e565b60405180910390a150505050505050505050565b600260149054906101000a900460ff1681565b6004818154811061113657600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611201576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260149054906101000a900460ff1615600260146101000a81548160ff021916908315150217905550565b60005481565b60076020528060005260406000206000915090505481565b600260149054906101000a900460ff16611291576040517f98be8f8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611314576040517f86ea00f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f8d0399cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806004805490500361141c576040517f97e4c0c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004805490500361143257600090506114a8565b60026004805490500361146957600060026001546114509190611ede565b1461145c57600161145f565b60005b60ff1690506114a7565b6000611473611622565b90506004805490506001546004805490508361148f9190611ede565b6114999190611f0f565b6114a39190611ede565b9150505b5b6000600482815481106114be576114bd611d2d565b5b90600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152505090507f5696aee68707c62f9bebcf0abbb57636a0393ef0bae50a222e950b41421ec3c2816000015133836020015160405161157493929190611d9e565b60405180910390a1806000015173ffffffffffffffffffffffffffffffffffffffff166342842e0e303384602001516040518463ffffffff1660e01b81526004016115c193929190611d9e565b600060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b50505050600180546116019190611f0f565b6001819055505050565b6000826116188584611676565b1490509392505050565b60008044426004805490504360014361163b9190611f65565b40333a6040516020016116549796959493929190611fdb565b6040516020818303038152906040528051906020012060001c90508091505090565b60008082905060005b84518110156116c1576116ac8286838151811061169f5761169e611d2d565b5b60200260200101516116cc565b915080806116b990611e04565b91505061167f565b508091505092915050565b60008183106116e4576116df82846116f7565b6116ef565b6116ee83836116f7565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061174d82611722565b9050919050565b61175d81611742565b811461176857600080fd5b50565b60008135905061177a81611754565b92915050565b60006020828403121561179657611795611718565b5b60006117a48482850161176b565b91505092915050565b6117b681611742565b82525050565b6000819050919050565b6117cf816117bc565b82525050565b60006060820190506117ea60008301866117ad565b6117f760208301856117c6565b61180460408301846117c6565b949350505050565b600060408201905061182160008301856117ad565b61182e60208301846117c6565b9392505050565b61183e816117bc565b811461184957600080fd5b50565b60008135905061185b81611835565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118b48261186b565b810181811067ffffffffffffffff821117156118d3576118d261187c565b5b80604052505050565b60006118e661170e565b90506118f282826118ab565b919050565b600067ffffffffffffffff8211156119125761191161187c565b5b61191b8261186b565b9050602081019050919050565b82818337600083830152505050565b600061194a611945846118f7565b6118dc565b90508281526020810184848401111561196657611965611866565b5b611971848285611928565b509392505050565b600082601f83011261198e5761198d611861565b5b813561199e848260208601611937565b91505092915050565b600080600080608085870312156119c1576119c0611718565b5b60006119cf8782880161176b565b94505060206119e08782880161176b565b93505060406119f18782880161184c565b925050606085013567ffffffffffffffff811115611a1257611a1161171d565b5b611a1e87828801611979565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a5f81611a2a565b82525050565b6000602082019050611a7a6000830184611a56565b92915050565b6000819050919050565b611a9381611a80565b8114611a9e57600080fd5b50565b600081359050611ab081611a8a565b92915050565b600060208284031215611acc57611acb611718565b5b6000611ada84828501611aa1565b91505092915050565b600080fd5b600080fd5b60008083601f840112611b0357611b02611861565b5b8235905067ffffffffffffffff811115611b2057611b1f611ae3565b5b602083019150836020820283011115611b3c57611b3b611ae8565b5b9250929050565b600080600060408486031215611b5c57611b5b611718565b5b6000611b6a8682870161176b565b935050602084013567ffffffffffffffff811115611b8b57611b8a61171d565b5b611b9786828701611aed565b92509250509250925092565b60008115159050919050565b611bb881611ba3565b82525050565b6000602082019050611bd36000830184611baf565b92915050565b611be281611a80565b82525050565b6000602082019050611bfd6000830184611bd9565b92915050565b600080600060608486031215611c1c57611c1b611718565b5b6000611c2a8682870161176b565b9350506020611c3b8682870161184c565b9250506040611c4c8682870161176b565b9150509250925092565b6000602082019050611c6b60008301846117ad565b92915050565b60008060008060608587031215611c8b57611c8a611718565b5b6000611c998782880161176b565b9450506020611caa8782880161184c565b935050604085013567ffffffffffffffff811115611ccb57611cca61171d565b5b611cd787828801611aed565b925092505092959194509250565b600060208284031215611cfb57611cfa611718565b5b6000611d098482850161184c565b91505092915050565b6000602082019050611d2760008301846117c6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050611d6b81611754565b92915050565b600060208284031215611d8757611d86611718565b5b6000611d9584828501611d5c565b91505092915050565b6000606082019050611db360008301866117ad565b611dc060208301856117ad565b611dcd60408301846117c6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e0f826117bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e4157611e40611dd5565b5b600182019050919050565b60008160601b9050919050565b6000611e6482611e4c565b9050919050565b6000611e7682611e59565b9050919050565b611e8e611e8982611742565b611e6b565b82525050565b6000611ea08284611e7d565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611ee9826117bc565b9150611ef4836117bc565b925082611f0457611f03611eaf565b5b828206905092915050565b6000611f1a826117bc565b9150611f25836117bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f5a57611f59611dd5565b5b828201905092915050565b6000611f70826117bc565b9150611f7b836117bc565b925082821015611f8e57611f8d611dd5565b5b828203905092915050565b6000819050919050565b611fb4611faf826117bc565b611f99565b82525050565b6000819050919050565b611fd5611fd082611a80565b611fba565b82525050565b6000611fe7828a611fa3565b602082019150611ff78289611fa3565b6020820191506120078288611fa3565b6020820191506120178287611fa3565b6020820191506120278286611fc4565b6020820191506120378285611e7d565b6014820191506120478284611fa3565b6020820191508190509897505050505050505056fea2646970667358221220d157591f5355de6709d8c11bbfd84d193a4b3f6e50330f4d2acb70b36b6306ea64736f6c634300080d00330000000000000000000000000000000000000000000000000000000063778313c34831ac2435f7a9bad30f10cefff560d12ed6953a6e700715962a75ddf27195