608060405234801562000010575f80fd5b506040516200297a3803806200297a83398181016040528101906200003691906200027c565b806040518060400160405280600b81526020017f5465737420626c6f636b730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5442000000000000000000000000000000000000000000000000000000000000815250815f9081620000b3919062000510565b508060019081620000c5919062000510565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013b575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000132919062000605565b60405180910390fd5b6200014c816200015460201b60201c565b505062000620565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000246826200021b565b9050919050565b62000258816200023a565b811462000263575f80fd5b50565b5f8151905062000276816200024d565b92915050565b5f6020828403121562000294576200029362000217565b5b5f620002a38482850162000266565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200032857607f821691505b6020821081036200033e576200033d620002e3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000365565b620003ae868362000365565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003f8620003f2620003ec84620003c6565b620003cf565b620003c6565b9050919050565b5f819050919050565b6200041383620003d8565b6200042b6200042282620003ff565b84845462000371565b825550505050565b5f90565b6200044162000433565b6200044e81848462000408565b505050565b5b818110156200047557620004695f8262000437565b60018101905062000454565b5050565b601f821115620004c4576200048e8162000344565b620004998462000356565b81016020851015620004a9578190505b620004c1620004b88562000356565b83018262000453565b50505b505050565b5f82821c905092915050565b5f620004e65f1984600802620004c9565b1980831691505092915050565b5f620005008383620004d5565b9150826002028217905092915050565b6200051b82620002ac565b67ffffffffffffffff811115620005375762000536620002b6565b5b62000543825462000310565b6200055082828562000479565b5f60209050601f83116001811462000586575f841562000571578287015190505b6200057d8582620004f3565b865550620005ec565b601f198416620005968662000344565b5f5b82811015620005bf5784890151825560018201915060208501945060208101905062000598565b86831015620005df5784890151620005db601f891682620004d5565b8355505b6001600288020188555050505b505050505050565b620005ff816200023a565b82525050565b5f6020820190506200061a5f830184620005f4565b92915050565b61234c806200062e5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c80638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd146102ef578063e985e9c51461031f578063f0dda65c1461034f578063f2fde38b1461036b578063f47c84c5146103875761011f565b80638da5cb5b1461025f57806395d89b411461027d578063a14481941461029b578063a22cb465146102b7578063b88d4fde146102d35761011f565b806323b872dd116100f257806323b872dd146101bd57806342842e0e146101d95780636352211e146101f557806370a0823114610225578063715018a6146102555761011f565b806301ffc9a71461012357806306fdde0314610153578063081812fc14610171578063095ea7b3146101a1575b5f80fd5b61013d600480360381019061013891906119fe565b6103a5565b60405161014a9190611a43565b60405180910390f35b61015b6103b6565b6040516101689190611ae6565b60405180910390f35b61018b60048036038101906101869190611b39565b610445565b6040516101989190611ba3565b60405180910390f35b6101bb60048036038101906101b69190611be6565b610460565b005b6101d760048036038101906101d29190611c24565b610476565b005b6101f360048036038101906101ee9190611c24565b610575565b005b61020f600480360381019061020a9190611b39565b610594565b60405161021c9190611ba3565b60405180910390f35b61023f600480360381019061023a9190611c74565b6105a5565b60405161024c9190611cae565b60405180910390f35b61025d61065b565b005b61026761066e565b6040516102749190611ba3565b60405180910390f35b610285610696565b6040516102929190611ae6565b60405180910390f35b6102b560048036038101906102b09190611be6565b610726565b005b6102d160048036038101906102cc9190611cf1565b610799565b005b6102ed60048036038101906102e89190611e5b565b6107af565b005b61030960048036038101906103049190611b39565b6107cc565b6040516103169190611ae6565b60405180910390f35b61033960048036038101906103349190611edb565b610832565b6040516103469190611a43565b60405180910390f35b61036960048036038101906103649190611be6565b6108c0565b005b61038560048036038101906103809190611c74565b6109a5565b005b61038f610a29565b60405161039c9190611cae565b60405180910390f35b5f6103af82610a2f565b9050919050565b60605f80546103c490611f46565b80601f01602080910402602001604051908101604052809291908181526020018280546103f090611f46565b801561043b5780601f106104125761010080835404028352916020019161043b565b820191905f5260205f20905b81548152906001019060200180831161041e57829003601f168201915b5050505050905090565b5f61044f82610b10565b5061045982610b96565b9050919050565b610472828261046d610bcf565b610bd6565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104e6575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104dd9190611ba3565b60405180910390fd5b5f6104f983836104f4610bcf565b610be8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461056f578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161056693929190611f76565b60405180910390fd5b50505050565b61058f83838360405180602001604052805f8152506107af565b505050565b5f61059e82610b10565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610616575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161060d9190611ba3565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610663610df3565b61066c5f610e7a565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546106a590611f46565b80601f01602080910402602001604051908101604052809291908181526020018280546106d190611f46565b801561071c5780601f106106f35761010080835404028352916020019161071c565b820191905f5260205f20905b8154815290600101906020018083116106ff57829003601f168201915b5050505050905090565b61072e610df3565b6103e860075410610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b90611ff5565b60405180910390fd5b61077e8282610f3d565b60075f81548092919061079090612040565b91905055505050565b6107ab6107a4610bcf565b8383610f5a565b5050565b6107ba848484610476565b6107c6848484846110c3565b50505050565b60606107d782610b10565b505f6107e1611275565b90505f8151116107ff5760405180602001604052805f81525061082a565b806108098461128b565b60405160200161081a9291906120c1565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6103e8816007546108d191906120e4565b1115610912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090990612161565b60405180910390fd5b5f8111610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b906121c9565b60405180910390fd5b5f5b8181101561098857610975838260075461097091906120e4565b610f3d565b808061098090612040565b915050610956565b508060075f82825461099a91906120e4565b925050819055505050565b6109ad610df3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a1d575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a149190611ba3565b60405180910390fd5b610a2681610e7a565b50565b6103e881565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b095750610b0882611355565b5b9050919050565b5f80610b1b836113be565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b8d57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b849190611cae565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610be383838360016113f7565b505050565b5f80610bf3846113be565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c3457610c338184866115b6565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cbf57610c735f855f806113f7565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610d3e57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610dfb610bcf565b73ffffffffffffffffffffffffffffffffffffffff16610e1961066e565b73ffffffffffffffffffffffffffffffffffffffff1614610e7857610e3c610bcf565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e6f9190611ba3565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610f56828260405180602001604052805f815250611679565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fca57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610fc19190611ba3565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110b69190611a43565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b111561126f578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611106610bcf565b8685856040518563ffffffff1660e01b81526004016111289493929190612239565b6020604051808303815f875af192505050801561116357506040513d601f19601f820116820180604052508101906111609190612297565b60015b6111e4573d805f8114611191576040519150601f19603f3d011682016040523d82523d5f602084013e611196565b606091505b505f8151036111dc57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111d39190611ba3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461126d57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112649190611ba3565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60605f600161129984611694565b0190505f8167ffffffffffffffff8111156112b7576112b6611d37565b5b6040519080825280601f01601f1916602001820160405280156112e95781602001600182028036833780820191505090505b5090505f82602001820190505b60011561134a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161133f5761133e6122c2565b5b0494505f85036112f6575b819350505050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061142f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611561575f61143e84610b10565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114a857508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114bb57506114b98184610832565b155b156114fd57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016114f49190611ba3565b60405180910390fd5b811561155f57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6115c18383836117e5565b611674575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361163557806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161162c9190611cae565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161166b9291906122ef565b60405180910390fd5b505050565b61168383836118a5565b61168f5f8484846110c3565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106116f0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816116e6576116e56122c2565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061172d576d04ee2d6d415b85acef81000000008381611723576117226122c2565b5b0492506020810190505b662386f26fc10000831061175c57662386f26fc100008381611752576117516122c2565b5b0492506010810190505b6305f5e1008310611785576305f5e100838161177b5761177a6122c2565b5b0492506008810190505b61271083106117aa5761271083816117a05761179f6122c2565b5b0492506004810190505b606483106117cd57606483816117c3576117c26122c2565b5b0492506002810190505b600a83106117dc576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561189c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061185d575061185c8484610832565b5b8061189b57508273ffffffffffffffffffffffffffffffffffffffff1661188383610b96565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611915575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161190c9190611ba3565b60405180910390fd5b5f61192183835f610be8565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611993575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161198a9190611ba3565b60405180910390fd5b505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6119dd816119a9565b81146119e7575f80fd5b50565b5f813590506119f8816119d4565b92915050565b5f60208284031215611a1357611a126119a1565b5b5f611a20848285016119ea565b91505092915050565b5f8115159050919050565b611a3d81611a29565b82525050565b5f602082019050611a565f830184611a34565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a93578082015181840152602081019050611a78565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ab882611a5c565b611ac28185611a66565b9350611ad2818560208601611a76565b611adb81611a9e565b840191505092915050565b5f6020820190508181035f830152611afe8184611aae565b905092915050565b5f819050919050565b611b1881611b06565b8114611b22575f80fd5b50565b5f81359050611b3381611b0f565b92915050565b5f60208284031215611b4e57611b4d6119a1565b5b5f611b5b84828501611b25565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b8d82611b64565b9050919050565b611b9d81611b83565b82525050565b5f602082019050611bb65f830184611b94565b92915050565b611bc581611b83565b8114611bcf575f80fd5b50565b5f81359050611be081611bbc565b92915050565b5f8060408385031215611bfc57611bfb6119a1565b5b5f611c0985828601611bd2565b9250506020611c1a85828601611b25565b9150509250929050565b5f805f60608486031215611c3b57611c3a6119a1565b5b5f611c4886828701611bd2565b9350506020611c5986828701611bd2565b9250506040611c6a86828701611b25565b9150509250925092565b5f60208284031215611c8957611c886119a1565b5b5f611c9684828501611bd2565b91505092915050565b611ca881611b06565b82525050565b5f602082019050611cc15f830184611c9f565b92915050565b611cd081611a29565b8114611cda575f80fd5b50565b5f81359050611ceb81611cc7565b92915050565b5f8060408385031215611d0757611d066119a1565b5b5f611d1485828601611bd2565b9250506020611d2585828601611cdd565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d6d82611a9e565b810181811067ffffffffffffffff82111715611d8c57611d8b611d37565b5b80604052505050565b5f611d9e611998565b9050611daa8282611d64565b919050565b5f67ffffffffffffffff821115611dc957611dc8611d37565b5b611dd282611a9e565b9050602081019050919050565b828183375f83830152505050565b5f611dff611dfa84611daf565b611d95565b905082815260208101848484011115611e1b57611e1a611d33565b5b611e26848285611ddf565b509392505050565b5f82601f830112611e4257611e41611d2f565b5b8135611e52848260208601611ded565b91505092915050565b5f805f8060808587031215611e7357611e726119a1565b5b5f611e8087828801611bd2565b9450506020611e9187828801611bd2565b9350506040611ea287828801611b25565b925050606085013567ffffffffffffffff811115611ec357611ec26119a5565b5b611ecf87828801611e2e565b91505092959194509250565b5f8060408385031215611ef157611ef06119a1565b5b5f611efe85828601611bd2565b9250506020611f0f85828601611bd2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f5d57607f821691505b602082108103611f7057611f6f611f19565b5b50919050565b5f606082019050611f895f830186611b94565b611f966020830185611c9f565b611fa36040830184611b94565b949350505050565b7f4d617820746f6b656e73206d696e7465640000000000000000000000000000005f82015250565b5f611fdf601183611a66565b9150611fea82611fab565b602082019050919050565b5f6020820190508181035f83015261200c81611fd3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61204a82611b06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361207c5761207b612013565b5b600182019050919050565b5f81905092915050565b5f61209b82611a5c565b6120a58185612087565b93506120b5818560208601611a76565b80840191505092915050565b5f6120cc8285612091565b91506120d88284612091565b91508190509392505050565b5f6120ee82611b06565b91506120f983611b06565b925082820190508082111561211157612110612013565b5b92915050565b7f45786365656473206d617820746f6b656e7300000000000000000000000000005f82015250565b5f61214b601283611a66565b915061215682612117565b602082019050919050565b5f6020820190508181035f8301526121788161213f565b9050919050565b7f496e76616c6964207175616e74697479000000000000000000000000000000005f82015250565b5f6121b3601083611a66565b91506121be8261217f565b602082019050919050565b5f6020820190508181035f8301526121e0816121a7565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61220b826121e7565b61221581856121f1565b9350612225818560208601611a76565b61222e81611a9e565b840191505092915050565b5f60808201905061224c5f830187611b94565b6122596020830186611b94565b6122666040830185611c9f565b81810360608301526122788184612201565b905095945050505050565b5f81519050612291816119d4565b92915050565b5f602082840312156122ac576122ab6119a1565b5b5f6122b984828501612283565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6040820190506123025f830185611b94565b61230f6020830184611c9f565b939250505056fea2646970667358221220ff410af2e5f317f17c4397c01fd5afc68babdc25ff5276fd395eddd07cbc360464736f6c634300081400330000000000000000000000008ba3187ed532f373984b50ab07b554e0ec8fbb5c