60806040525f600560146101000a81548160ff021916908315150217905550348015610029575f80fd5b506040516121b53803806121b5833981810160405281019061004b9190610307565b338282816003908161005d919061058a565b50806004908161006d919061058a565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100e0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100d79190610698565b60405180910390fd5b6100ef816100f760201b60201c565b5050506106b1565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610219826101d3565b810181811067ffffffffffffffff82111715610238576102376101e3565b5b80604052505050565b5f61024a6101ba565b90506102568282610210565b919050565b5f67ffffffffffffffff821115610275576102746101e3565b5b61027e826101d3565b9050602081019050919050565b8281835e5f83830152505050565b5f6102ab6102a68461025b565b610241565b9050828152602081018484840111156102c7576102c66101cf565b5b6102d284828561028b565b509392505050565b5f82601f8301126102ee576102ed6101cb565b5b81516102fe848260208601610299565b91505092915050565b5f806040838503121561031d5761031c6101c3565b5b5f83015167ffffffffffffffff81111561033a576103396101c7565b5b610346858286016102da565b925050602083015167ffffffffffffffff811115610367576103666101c7565b5b610373858286016102da565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103cb57607f821691505b6020821081036103de576103dd610387565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610405565b61044a8683610405565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61048e61048961048484610462565b61046b565b610462565b9050919050565b5f819050919050565b6104a783610474565b6104bb6104b382610495565b848454610411565b825550505050565b5f90565b6104cf6104c3565b6104da81848461049e565b505050565b5b818110156104fd576104f25f826104c7565b6001810190506104e0565b5050565b601f82111561054257610513816103e4565b61051c846103f6565b8101602085101561052b578190505b61053f610537856103f6565b8301826104df565b50505b505050565b5f82821c905092915050565b5f6105625f1984600802610547565b1980831691505092915050565b5f61057a8383610553565b9150826002028217905092915050565b6105938261037d565b67ffffffffffffffff8111156105ac576105ab6101e3565b5b6105b682546103b4565b6105c1828285610501565b5f60209050601f8311600181146105f2575f84156105e0578287015190505b6105ea858261056f565b865550610651565b601f198416610600866103e4565b5f5b8281101561062757848901518255600182019150602085019450602081019050610602565b868310156106445784890151610640601f891682610553565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61068282610659565b9050919050565b61069281610678565b82525050565b5f6020820190506106ab5f830184610689565b92915050565b611af7806106be5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c8063667682ec116100ab57806395d89b411161006f57806395d89b41146102e1578063a9059cbb146102ff578063dd62ed3e1461032f578063f2fde38b1461035f578063f3c756dc1461037b5761011f565b8063667682ec1461024f57806370a082311461026b578063715018a61461029b5780638da5cb5b146102a5578063936cf55e146102c35761011f565b806323b872dd116100f257806323b872dd146101ab5780632965bc6f146101db578063313ce567146101f957806339fbfd0d1461021757806340c10f19146102335761011f565b806306fdde0314610123578063095ea7b3146101415780630d1118ce1461017157806318160ddd1461018d575b5f80fd5b61012b610397565b60405161013891906112c4565b60405180910390f35b61015b60048036038101906101569190611382565b610427565b60405161016891906113da565b60405180910390f35b61018b60048036038101906101869190611382565b610449565b005b6101956104a1565b6040516101a29190611402565b60405180910390f35b6101c560048036038101906101c0919061141b565b6104aa565b6040516101d291906113da565b60405180910390f35b6101e36104d8565b6040516101f091906113da565b60405180910390f35b6102016104eb565b60405161020e9190611486565b60405180910390f35b610231600480360381019061022c919061169f565b6104ef565b005b61024d60048036038101906102489190611382565b610598565b005b61026960048036038101906102649190611715565b6105fc565b005b61028560048036038101906102809190611715565b610720565b6040516102929190611402565b60405180910390f35b6102a3610765565b005b6102ad610778565b6040516102ba919061174f565b60405180910390f35b6102cb6107a0565b6040516102d8919061174f565b60405180910390f35b6102e96107c5565b6040516102f691906112c4565b60405180910390f35b61031960048036038101906103149190611382565b610855565b60405161032691906113da565b60405180910390f35b61034960048036038101906103449190611768565b610877565b6040516103569190611402565b60405180910390f35b61037960048036038101906103749190611715565b6108f9565b005b610395600480360381019061039091906117a6565b61097d565b005b6060600380546103a6906117fe565b80601f01602080910402602001604051908101604052809291908181526020018280546103d2906117fe565b801561041d5780601f106103f45761010080835404028352916020019161041d565b820191905f5260205f20905b81548152906001019060200180831161040057829003601f168201915b5050505050905090565b5f80610431610a89565b905061043e818585610a90565b600191505092915050565b610451610aa2565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561048d57505f8114155b1561049d5761049c8282610b29565b5b5050565b5f600254905090565b5f806104b4610a89565b90506104c1858285610ba8565b6104cc858585610c3a565b60019150509392505050565b600560149054906101000a900460ff1681565b5f90565b5f5b82518110156105935782818151811061050d5761050c61182e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16146105865761058583828151811061055d5761055c61182e565b5b60200260200101518383815181106105785761057761182e565b5b6020026020010151610598565b5b80806001019150506104f1565b505050565b6105a0610aa2565b6105aa8282610d2a565b8173ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273826040516105f09190611402565b60405180910390a25050565b610604610aa2565b600560149054906101000a900460ff1615610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b906118cb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036106c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b990611959565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560146101000a81548160ff02191690831515021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61076d610aa2565b6107765f610da9565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546107d4906117fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610800906117fe565b801561084b5780601f106108225761010080835404028352916020019161084b565b820191905f5260205f20905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b5f8061085f610a89565b905061086c818585610c3a565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610901610aa2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610971575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610968919061174f565b60405180910390fd5b61097a81610da9565b50565b600560149054906101000a900460ff166109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906119e7565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b20fce3d33846040518363ffffffff1660e01b8152600401610a2c929190611a05565b5f604051808303815f87803b158015610a43575f80fd5b505af1158015610a55573d5f803e3d5ffd5b50505050610a8460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610855565b505050565b5f33905090565b610a9d8383836001610e6c565b505050565b610aaa610a89565b73ffffffffffffffffffffffffffffffffffffffff16610ac8610778565b73ffffffffffffffffffffffffffffffffffffffff1614610b2757610aeb610a89565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1e919061174f565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b99575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b90919061174f565b60405180910390fd5b610ba4825f8361103b565b5050565b5f610bb38484610877565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c345781811015610c25578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c1c93929190611a2c565b60405180910390fd5b610c3384848484035f610e6c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610caa575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610ca1919061174f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d11919061174f565b60405180910390fd5b610d2583838361103b565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d9a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d91919061174f565b60405180910390fd5b610da55f838361103b565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610edc575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ed3919061174f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f4c575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f43919061174f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611035578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161102c9190611402565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361108b578060025f82825461107f9190611a8e565b92505081905550611159565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611114578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161110b93929190611a2c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a0578060025f82825403925050819055506111ea565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112479190611402565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61129682611254565b6112a0818561125e565b93506112b081856020860161126e565b6112b98161127c565b840191505092915050565b5f6020820190508181035f8301526112dc818461128c565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61131e826112f5565b9050919050565b61132e81611314565b8114611338575f80fd5b50565b5f8135905061134981611325565b92915050565b5f819050919050565b6113618161134f565b811461136b575f80fd5b50565b5f8135905061137c81611358565b92915050565b5f8060408385031215611398576113976112ed565b5b5f6113a58582860161133b565b92505060206113b68582860161136e565b9150509250929050565b5f8115159050919050565b6113d4816113c0565b82525050565b5f6020820190506113ed5f8301846113cb565b92915050565b6113fc8161134f565b82525050565b5f6020820190506114155f8301846113f3565b92915050565b5f805f60608486031215611432576114316112ed565b5b5f61143f8682870161133b565b93505060206114508682870161133b565b92505060406114618682870161136e565b9150509250925092565b5f60ff82169050919050565b6114808161146b565b82525050565b5f6020820190506114995f830184611477565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114d98261127c565b810181811067ffffffffffffffff821117156114f8576114f76114a3565b5b80604052505050565b5f61150a6112e4565b905061151682826114d0565b919050565b5f67ffffffffffffffff821115611535576115346114a3565b5b602082029050602081019050919050565b5f80fd5b5f61155c6115578461151b565b611501565b9050808382526020820190506020840283018581111561157f5761157e611546565b5b835b818110156115a85780611594888261133b565b845260208401935050602081019050611581565b5050509392505050565b5f82601f8301126115c6576115c561149f565b5b81356115d684826020860161154a565b91505092915050565b5f67ffffffffffffffff8211156115f9576115f86114a3565b5b602082029050602081019050919050565b5f61161c611617846115df565b611501565b9050808382526020820190506020840283018581111561163f5761163e611546565b5b835b818110156116685780611654888261136e565b845260208401935050602081019050611641565b5050509392505050565b5f82601f8301126116865761168561149f565b5b813561169684826020860161160a565b91505092915050565b5f80604083850312156116b5576116b46112ed565b5b5f83013567ffffffffffffffff8111156116d2576116d16112f1565b5b6116de858286016115b2565b925050602083013567ffffffffffffffff8111156116ff576116fe6112f1565b5b61170b85828601611672565b9150509250929050565b5f6020828403121561172a576117296112ed565b5b5f6117378482850161133b565b91505092915050565b61174981611314565b82525050565b5f6020820190506117625f830184611740565b92915050565b5f806040838503121561177e5761177d6112ed565b5b5f61178b8582860161133b565b925050602061179c8582860161133b565b9150509250929050565b5f602082840312156117bb576117ba6112ed565b5b5f6117c88482850161136e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061181557607f821691505b602082108103611828576118276117d1565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f5374616b696e6720636f6e747261637420697320616c726561647920757064615f8201527f7465730000000000000000000000000000000000000000000000000000000000602082015250565b5f6118b560238361125e565b91506118c08261185b565b604082019050919050565b5f6020820190508181035f8301526118e2816118a9565b9050919050565b7f5374616b696e6720636f6e74726163742063616e6e6f742062652061206e756c5f8201527f6c20616464726573730000000000000000000000000000000000000000000000602082015250565b5f61194360298361125e565b915061194e826118e9565b604082019050919050565b5f6020820190508181035f83015261197081611937565b9050919050565b7f546f6b656e20636f6e74726163742069732079657420746f20626520696e69745f8201527f69616c697a656400000000000000000000000000000000000000000000000000602082015250565b5f6119d160278361125e565b91506119dc82611977565b604082019050919050565b5f6020820190508181035f8301526119fe816119c5565b9050919050565b5f604082019050611a185f830185611740565b611a2560208301846113f3565b9392505050565b5f606082019050611a3f5f830186611740565b611a4c60208301856113f3565b611a5960408301846113f3565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a988261134f565b9150611aa38361134f565b9250828201905080821115611abb57611aba611a61565b5b9291505056fea26469706673582212205f082e9c6b4e44d853e8809fb757cf53968c20cba8ab2f2cdd90e00630c168b664736f6c634300081900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104f70656e41636164656d79546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034f41540000000000000000000000000000000000000000000000000000000000