60806040526040518060400160405280600481526020017f444f475800000000000000000000000000000000000000000000000000000000815250600190816200004a91906200058b565b506040518060400160405280600481526020017f444f475800000000000000000000000000000000000000000000000000000000815250600290816200009191906200058b565b50600560065560056007553360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000e8575f80fd5b5062000109620000fd6200012d60201b60201c565b6200013460201b60201c565b62000127336b033b2e3c9fd0803ce8000000620001f560201b60201c565b62000702565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200020c816003546200031060201b90919060201c565b600381905550620002648160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200031060201b90919060201c565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000304919062000680565b60405180910390a35050565b5f81836200031f9190620006c8565b905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003a357607f821691505b602082108103620003b957620003b86200035e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200041d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003e0565b620004298683620003e0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004736200046d620004678462000441565b6200044a565b62000441565b9050919050565b5f819050919050565b6200048e8362000453565b620004a66200049d826200047a565b848454620003ec565b825550505050565b5f90565b620004bc620004ae565b620004c981848462000483565b505050565b5b81811015620004f057620004e45f82620004b2565b600181019050620004cf565b5050565b601f8211156200053f576200050981620003bf565b6200051484620003d1565b8101602085101562000524578190505b6200053c6200053385620003d1565b830182620004ce565b50505b505050565b5f82821c905092915050565b5f620005615f198460080262000544565b1980831691505092915050565b5f6200057b838362000550565b9150826002028217905092915050565b620005968262000327565b67ffffffffffffffff811115620005b257620005b162000331565b5b620005be82546200038b565b620005cb828285620004f4565b5f60209050601f83116001811462000601575f8415620005ec578287015190505b620005f885826200056e565b86555062000667565b601f1984166200061186620003bf565b5f5b828110156200063a5784890151825560018201915060208501945060208101905062000613565b868310156200065a578489015162000656601f89168262000550565b8355505b6001600288020188555050505b505050505050565b6200067a8162000441565b82525050565b5f602082019050620006955f8301846200066f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620006d48262000441565b9150620006e18362000441565b9250828201905080821115620006fc57620006fb6200069b565b5b92915050565b61191980620007105f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c8063691f224f1161009557806395d89b411161006457806395d89b411461028a578063a9059cbb146102a8578063dd62ed3e146102d8578063f2fde38b14610308576100fe565b8063691f224f1461021457806370a0823114610232578063715018a6146102625780638da5cb5b1461026c576100fe565b806324024efd116100d157806324024efd1461019e5780632dc0562d146101bc578063313ce567146101da5780635cb23e12146101f8576100fe565b806306fdde0314610102578063095ea7b31461012057806318160ddd1461015057806323b872dd1461016e575b5f80fd5b61010a610324565b604051610117919061123d565b60405180910390f35b61013a600480360381019061013591906112ee565b6103b0565b6040516101479190611346565b60405180910390f35b61015861049d565b604051610165919061136e565b60405180910390f35b61018860048036038101906101839190611387565b6104a3565b6040516101959190611346565b60405180910390f35b6101a6610a14565b6040516101b3919061136e565b60405180910390f35b6101c4610a1a565b6040516101d191906113e6565b60405180910390f35b6101e2610a3f565b6040516101ef919061141a565b60405180910390f35b610212600480360381019061020d9190611433565b610a44565b005b61021c610ae8565b604051610229919061136e565b60405180910390f35b61024c60048036038101906102479190611471565b610aee565b604051610259919061136e565b60405180910390f35b61026a610b03565b005b610274610b16565b60405161028191906113e6565b60405180910390f35b610292610b3d565b60405161029f919061123d565b60405180910390f35b6102c260048036038101906102bd91906112ee565b610bc9565b6040516102cf9190611346565b60405180910390f35b6102f260048036038101906102ed919061149c565b610f77565b6040516102ff919061136e565b60405180910390f35b610322600480360381019061031d9190611471565b610f97565b005b6001805461033190611507565b80601f016020809104026020016040519081016040528092919081815260200182805461035d90611507565b80156103a85780601f1061037f576101008083540402835291602001916103a8565b820191905f5260205f20905b81548152906001019060200180831161038b57829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161048b919061136e565b60405180910390a36001905092915050565b60035481565b5f60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051b90611581565b60405180910390fd5b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d6906115e9565b60405180910390fd5b5f61060860646105fa6006548661101990919063ffffffff16565b61102e90919063ffffffff16565b90505f61061e828561104390919063ffffffff16565b90506106708460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461104390919063ffffffff16565b60045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107018160045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461105890919063ffffffff16565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107b38260045f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461105890919063ffffffff16565b60045f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506108a08460055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461104390919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610979919061136e565b60405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109ff919061136e565b60405180910390a36001925050509392505050565b60075481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b610a4c61106d565b60648211158015610a5e575060648111155b610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9490611677565b60405180910390fd5b81600681905550806007819055507f8af72bce83e770654b24f833792771b0c5ecd95a31e17a43d11475b9f0c96aba8282604051610adc929190611695565b60405180910390a15050565b60065481565b6004602052805f5260405f205f915090505481565b610b0b61106d565b610b145f6110eb565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60028054610b4a90611507565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690611507565b8015610bc15780601f10610b9857610100808354040283529160200191610bc1565b820191905f5260205f20905b815481529060010190602001808311610ba457829003601f168201915b505050505081565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190611581565b60405180910390fd5b5f610c736064610c656007548661101990919063ffffffff16565b61102e90919063ffffffff16565b90505f610c89828561104390919063ffffffff16565b9050610cdb8460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461104390919063ffffffff16565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610d6c8160045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461105890919063ffffffff16565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e1e8260045f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461105890919063ffffffff16565b60045f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610edd919061136e565b60405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f63919061136e565b60405180910390a360019250505092915050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b610f9f61106d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361100d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110049061172c565b60405180910390fd5b611016816110eb565b50565b5f81836110269190611777565b905092915050565b5f818361103b91906117e5565b905092915050565b5f81836110509190611815565b905092915050565b5f81836110659190611848565b905092915050565b6110756111ac565b73ffffffffffffffffffffffffffffffffffffffff16611093610b16565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906118c5565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156111ea5780820151818401526020810190506111cf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61120f826111b3565b61121981856111bd565b93506112298185602086016111cd565b611232816111f5565b840191505092915050565b5f6020820190508181035f8301526112558184611205565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61128a82611261565b9050919050565b61129a81611280565b81146112a4575f80fd5b50565b5f813590506112b581611291565b92915050565b5f819050919050565b6112cd816112bb565b81146112d7575f80fd5b50565b5f813590506112e8816112c4565b92915050565b5f80604083850312156113045761130361125d565b5b5f611311858286016112a7565b9250506020611322858286016112da565b9150509250929050565b5f8115159050919050565b6113408161132c565b82525050565b5f6020820190506113595f830184611337565b92915050565b611368816112bb565b82525050565b5f6020820190506113815f83018461135f565b92915050565b5f805f6060848603121561139e5761139d61125d565b5b5f6113ab868287016112a7565b93505060206113bc868287016112a7565b92505060406113cd868287016112da565b9150509250925092565b6113e081611280565b82525050565b5f6020820190506113f95f8301846113d7565b92915050565b5f60ff82169050919050565b611414816113ff565b82525050565b5f60208201905061142d5f83018461140b565b92915050565b5f80604083850312156114495761144861125d565b5b5f611456858286016112da565b9250506020611467858286016112da565b9150509250929050565b5f602082840312156114865761148561125d565b5b5f611493848285016112a7565b91505092915050565b5f80604083850312156114b2576114b161125d565b5b5f6114bf858286016112a7565b92505060206114d0858286016112a7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061151e57607f821691505b602082108103611531576115306114da565b5b50919050565b7f42616c616e63653a20696e73756666696369656e7400000000000000000000005f82015250565b5f61156b6015836111bd565b915061157682611537565b602082019050919050565b5f6020820190508181035f8301526115988161155f565b9050919050565b7f416c6c6f77616e63653a206578636565646564000000000000000000000000005f82015250565b5f6115d36013836111bd565b91506115de8261159f565b602082019050919050565b5f6020820190508181035f830152611600816115c7565b9050919050565b7f546178207261746573206d757374206265206265747765656e203020616e64205f8201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b5f6116616023836111bd565b915061166c82611607565b604082019050919050565b5f6020820190508181035f83015261168e81611655565b9050919050565b5f6040820190506116a85f83018561135f565b6116b5602083018461135f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6117166026836111bd565b9150611721826116bc565b604082019050919050565b5f6020820190508181035f8301526117438161170a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611781826112bb565b915061178c836112bb565b925082820261179a816112bb565b915082820484148315176117b1576117b061174a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6117ef826112bb565b91506117fa836112bb565b92508261180a576118096117b8565b5b828204905092915050565b5f61181f826112bb565b915061182a836112bb565b92508282039050818111156118425761184161174a565b5b92915050565b5f611852826112bb565b915061185d836112bb565b92508282019050808211156118755761187461174a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6118af6020836111bd565b91506118ba8261187b565b602082019050919050565b5f6020820190508181035f8301526118dc816118a3565b905091905056fea264697066735822122048ebdfbe286246c43f2e991f73e939d1fa0affe6686cd64da011ecec9c6935d264736f6c63430008150033