608060405234801561000f575f80fd5b50604051612a6a380380612a6a83398181016040528101906100319190610934565b6040518060400160405280600781526020017f4d79546f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250815f90816100ab9190610b99565b5080600190816100bb9190610b99565b5050506100ce335f6100d460201b60201c565b50610cdf565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610144575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161013b9190610c77565b60405180910390fd5b5f61015683835f6101cd60201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146101c8575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016101bf9190610c77565b60405180910390fd5b505050565b5f806101de846103ea60201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146102255761022481848661042360201b60201c565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146102b65761026a5f855f806104ec60201b60201c565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461033557600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6104348383836106b760201b60201c565b6104e7575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104a857806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161049f9190610c9f565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016104de929190610cb8565b60405180910390fd5b505050565b808061052457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610662575f6105398461078360201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156105a357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156105bc57506105ba818461080f60201b60201c565b155b156105fe57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016105f59190610c77565b60405180910390fd5b811561066057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561077a57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806107355750610734848461080f60201b60201c565b5b8061077957508273ffffffffffffffffffffffffffffffffffffffff166107618361089d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f80610794836103ea60201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361080657826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016107fd9190610c9f565b60405180910390fd5b80915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610903826108da565b9050919050565b610913816108f9565b811461091d575f80fd5b50565b5f8151905061092e8161090a565b92915050565b5f60208284031215610949576109486108d6565b5b5f61095684828501610920565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109da57607f821691505b6020821081036109ed576109ec610996565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a4f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a14565b610a598683610a14565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a9d610a98610a9384610a71565b610a7a565b610a71565b9050919050565b5f819050919050565b610ab683610a83565b610aca610ac282610aa4565b848454610a20565b825550505050565b5f90565b610ade610ad2565b610ae9818484610aad565b505050565b5b81811015610b0c57610b015f82610ad6565b600181019050610aef565b5050565b601f821115610b5157610b22816109f3565b610b2b84610a05565b81016020851015610b3a578190505b610b4e610b4685610a05565b830182610aee565b50505b505050565b5f82821c905092915050565b5f610b715f1984600802610b56565b1980831691505092915050565b5f610b898383610b62565b9150826002028217905092915050565b610ba28261095f565b67ffffffffffffffff811115610bbb57610bba610969565b5b610bc582546109c3565b610bd0828285610b10565b5f60209050601f831160018114610c01575f8415610bef578287015190505b610bf98582610b7e565b865550610c60565b601f198416610c0f866109f3565b5f5b82811015610c3657848901518255600182019150602085019450602081019050610c11565b86831015610c535784890151610c4f601f891682610b62565b8355505b6001600288020188555050505b505050505050565b610c71816108f9565b82525050565b5f602082019050610c8a5f830184610c68565b92915050565b610c9981610a71565b82525050565b5f602082019050610cb25f830184610c90565b92915050565b5f604082019050610ccb5f830185610c68565b610cd86020830184610c90565b9392505050565b611d7e80610cec5f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806370a082311161008a578063a22cb46511610064578063a22cb46514610258578063b88d4fde14610274578063c87b56dd14610290578063e985e9c5146102c0576100e8565b806370a08231146101ee57806395d89b411461021e578063a14481941461023c576100e8565b8063095ea7b3116100c6578063095ea7b31461016a57806323b872dd1461018657806342842e0e146101a25780636352211e146101be576100e8565b806301ffc9a7146100ec57806306fdde031461011c578063081812fc1461013a575b5f80fd5b610106600480360381019061010191906115f3565b6102f0565b6040516101139190611638565b60405180910390f35b6101246103d1565b60405161013191906116c1565b60405180910390f35b610154600480360381019061014f9190611714565b610460565b604051610161919061177e565b60405180910390f35b610184600480360381019061017f91906117c1565b61047b565b005b6101a0600480360381019061019b91906117ff565b610491565b005b6101bc60048036038101906101b791906117ff565b610590565b005b6101d860048036038101906101d39190611714565b6105af565b6040516101e5919061177e565b60405180910390f35b6102086004803603810190610203919061184f565b6105c0565b6040516102159190611889565b60405180910390f35b610226610676565b60405161023391906116c1565b60405180910390f35b610256600480360381019061025191906117c1565b610706565b005b610272600480360381019061026d91906118cc565b610714565b005b61028e60048036038101906102899190611a36565b61072a565b005b6102aa60048036038101906102a59190611714565b61074f565b6040516102b791906116c1565b60405180910390f35b6102da60048036038101906102d59190611ab6565b6107b5565b6040516102e79190611638565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ca57506103c982610843565b5b9050919050565b60605f80546103df90611b21565b80601f016020809104026020016040519081016040528092919081815260200182805461040b90611b21565b80156104565780601f1061042d57610100808354040283529160200191610456565b820191905f5260205f20905b81548152906001019060200180831161043957829003601f168201915b5050505050905090565b5f61046a826108ac565b5061047482610932565b9050919050565b61048d828261048861096b565b610972565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610501575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104f8919061177e565b60405180910390fd5b5f610514838361050f61096b565b610984565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461058a578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161058193929190611b51565b60405180910390fd5b50505050565b6105aa83838360405180602001604052805f81525061072a565b505050565b5f6105b9826108ac565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610631575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610628919061177e565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606001805461068590611b21565b80601f01602080910402602001604051908101604052809291908181526020018280546106b190611b21565b80156106fc5780601f106106d3576101008083540402835291602001916106fc565b820191905f5260205f20905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b6107108282610b8f565b5050565b61072661071f61096b565b8383610bac565b5050565b610735848484610491565b61074961074061096b565b85858585610d15565b50505050565b606061075a826108ac565b505f610764610ec1565b90505f8151116107825760405180602001604052805f8152506107ad565b8061078c84610ee1565b60405160200161079d929190611bc0565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f806108b783610fab565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361092957826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109209190611889565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b61097f8383836001610fe4565b505050565b5f8061098f84610fab565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146109d0576109cf8184866111a3565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a5b57610a0f5f855f80610fe4565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610ada57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610ba8828260405180602001604052805f815250611266565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c1c57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610c13919061177e565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d089190611638565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115610eba578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401610d739493929190611c35565b6020604051808303815f875af1925050508015610dae57506040513d601f19601f82011682018060405250810190610dab9190611c93565b60015b610e2f573d805f8114610ddc576040519150601f19603f3d011682016040523d82523d5f602084013e610de1565b606091505b505f815103610e2757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e1e919061177e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610eb857836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610eaf919061177e565b60405180910390fd5b505b5050505050565b6060604051806060016040528060368152602001611d1360369139905090565b60605f6001610eef84611289565b0190505f8167ffffffffffffffff811115610f0d57610f0c611912565b5b6040519080825280601f01601f191660200182016040528015610f3f5781602001600182028036833780820191505090505b5090505f82602001820190505b600115610fa0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610f9557610f94611cbe565b5b0494505f8503610f4c575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061101c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561114e575f61102b846108ac565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561109557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156110a857506110a681846107b5565b155b156110ea57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016110e1919061177e565b60405180910390fd5b811561114c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6111ae8383836113da565b611261575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361122257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112199190611889565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611258929190611ceb565b60405180910390fd5b505050565b611270838361149a565b61128461127b61096b565b5f858585610d15565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106112e5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816112db576112da611cbe565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611322576d04ee2d6d415b85acef8100000000838161131857611317611cbe565b5b0492506020810190505b662386f26fc10000831061135157662386f26fc10000838161134757611346611cbe565b5b0492506010810190505b6305f5e100831061137a576305f5e10083816113705761136f611cbe565b5b0492506008810190505b612710831061139f57612710838161139557611394611cbe565b5b0492506004810190505b606483106113c257606483816113b8576113b7611cbe565b5b0492506002810190505b600a83106113d1576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561149157508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611452575061145184846107b5565b5b8061149057508273ffffffffffffffffffffffffffffffffffffffff1661147883610932565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361150a575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611501919061177e565b60405180910390fd5b5f61151683835f610984565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611588575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161157f919061177e565b60405180910390fd5b505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115d28161159e565b81146115dc575f80fd5b50565b5f813590506115ed816115c9565b92915050565b5f6020828403121561160857611607611596565b5b5f611615848285016115df565b91505092915050565b5f8115159050919050565b6116328161161e565b82525050565b5f60208201905061164b5f830184611629565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61169382611651565b61169d818561165b565b93506116ad81856020860161166b565b6116b681611679565b840191505092915050565b5f6020820190508181035f8301526116d98184611689565b905092915050565b5f819050919050565b6116f3816116e1565b81146116fd575f80fd5b50565b5f8135905061170e816116ea565b92915050565b5f6020828403121561172957611728611596565b5b5f61173684828501611700565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117688261173f565b9050919050565b6117788161175e565b82525050565b5f6020820190506117915f83018461176f565b92915050565b6117a08161175e565b81146117aa575f80fd5b50565b5f813590506117bb81611797565b92915050565b5f80604083850312156117d7576117d6611596565b5b5f6117e4858286016117ad565b92505060206117f585828601611700565b9150509250929050565b5f805f6060848603121561181657611815611596565b5b5f611823868287016117ad565b9350506020611834868287016117ad565b925050604061184586828701611700565b9150509250925092565b5f6020828403121561186457611863611596565b5b5f611871848285016117ad565b91505092915050565b611883816116e1565b82525050565b5f60208201905061189c5f83018461187a565b92915050565b6118ab8161161e565b81146118b5575f80fd5b50565b5f813590506118c6816118a2565b92915050565b5f80604083850312156118e2576118e1611596565b5b5f6118ef858286016117ad565b9250506020611900858286016118b8565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61194882611679565b810181811067ffffffffffffffff8211171561196757611966611912565b5b80604052505050565b5f61197961158d565b9050611985828261193f565b919050565b5f67ffffffffffffffff8211156119a4576119a3611912565b5b6119ad82611679565b9050602081019050919050565b828183375f83830152505050565b5f6119da6119d58461198a565b611970565b9050828152602081018484840111156119f6576119f561190e565b5b611a018482856119ba565b509392505050565b5f82601f830112611a1d57611a1c61190a565b5b8135611a2d8482602086016119c8565b91505092915050565b5f805f8060808587031215611a4e57611a4d611596565b5b5f611a5b878288016117ad565b9450506020611a6c878288016117ad565b9350506040611a7d87828801611700565b925050606085013567ffffffffffffffff811115611a9e57611a9d61159a565b5b611aaa87828801611a09565b91505092959194509250565b5f8060408385031215611acc57611acb611596565b5b5f611ad9858286016117ad565b9250506020611aea858286016117ad565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b3857607f821691505b602082108103611b4b57611b4a611af4565b5b50919050565b5f606082019050611b645f83018661176f565b611b71602083018561187a565b611b7e604083018461176f565b949350505050565b5f81905092915050565b5f611b9a82611651565b611ba48185611b86565b9350611bb481856020860161166b565b80840191505092915050565b5f611bcb8285611b90565b9150611bd78284611b90565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611c0782611be3565b611c118185611bed565b9350611c2181856020860161166b565b611c2a81611679565b840191505092915050565b5f608082019050611c485f83018761176f565b611c55602083018661176f565b611c62604083018561187a565b8181036060830152611c748184611bfd565b905095945050505050565b5f81519050611c8d816115c9565b92915050565b5f60208284031215611ca857611ca7611596565b5b5f611cb584828501611c7f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611cfe5f83018561176f565b611d0b602083018461187a565b939250505056fe697066733a2f2f516d64555a4551686873543943516d374e7268396e396454663652325154454d4d344e474c686f65634d724439482fa264697066735822122011c7a752712c604f613a47643d71cfb24feb0efcaf8f12e29ed535649d6e71f964736f6c634300081a0033000000000000000000000000d6b364515b2b0224d924c3fd4753e6099ee21249