608060405234801562000010575f80fd5b5060405162004bf938038062004bf9833981810160405281019062000036919062000550565b6040518060400160405280600981526020017f4c616e64506c6f747300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c414e4400000000000000000000000000000000000000000000000000000000815250815f9081620000b2919062000823565b508060019081620000c4919062000823565b5050505f600b5f6101000a81548160ff021916908315150217905550620001085f801b73ba542069e122522b3564a4b50e867b82a3f072ed6200028860201b60201c565b506200014f7f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa8873ba542069e122522b3564a4b50e867b82a3f072ed6200028860201b60201c565b50620001645f801b336200038460201b60201c565b508360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d5f815480929190620002799062000934565b91905055505050505062000980565b5f6200029b83836200048060201b60201c565b6200037a576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000316620004e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506200037e565b5f90505b92915050565b5f6200039783836200048060201b60201c565b1562000476575f600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000412620004e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506200047a565b5f90505b92915050565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200051a82620004ef565b9050919050565b6200052c816200050e565b811462000537575f80fd5b50565b5f815190506200054a8162000521565b92915050565b5f805f80608085870312156200056b576200056a620004eb565b5b5f6200057a878288016200053a565b94505060206200058d878288016200053a565b9350506040620005a0878288016200053a565b9250506060620005b3878288016200053a565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200063b57607f821691505b602082108103620006515762000650620005f6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000678565b620006c1868362000678565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200070b62000705620006ff84620006d9565b620006e2565b620006d9565b9050919050565b5f819050919050565b6200072683620006eb565b6200073e620007358262000712565b84845462000684565b825550505050565b5f90565b6200075462000746565b620007618184846200071b565b505050565b5b8181101562000788576200077c5f826200074a565b60018101905062000767565b5050565b601f821115620007d757620007a18162000657565b620007ac8462000669565b81016020851015620007bc578190505b620007d4620007cb8562000669565b83018262000766565b50505b505050565b5f82821c905092915050565b5f620007f95f1984600802620007dc565b1980831691505092915050565b5f620008138383620007e8565b9150826002028217905092915050565b6200082e82620005bf565b67ffffffffffffffff8111156200084a5762000849620005c9565b5b62000856825462000623565b620008638282856200078c565b5f60209050601f83116001811462000899575f841562000884578287015190505b62000890858262000806565b865550620008ff565b601f198416620008a98662000657565b5f5b82811015620008d257848901518255600182019150602085019450602081019050620008ab565b86831015620008f25784890151620008ee601f891682620007e8565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200094082620006d9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000975576200097462000907565b5b600182019050919050565b61426b806200098e5f395ff3fe608060405234801561000f575f80fd5b5060043610610271575f3560e01c80636352211e1161014f578063a22cb465116100c1578063c87b56dd11610085578063c87b56dd14610761578063cbba216914610791578063d3f33009146107af578063d547741f146107cd578063e985e9c5146107e9578063f92854461461081957610271565b8063a22cb465146106cf578063ab400706146106eb578063b73ba81d14610709578063b88d4fde14610727578063c1eb5ddd1461074357610271565b80638456cb59116101135780638456cb591461060b57806384a016091461061557806388ac7d4c1461064557806391d148541461066357806395d89b4114610693578063a217fddf146106b157610271565b80636352211e1461055357806370a082311461058357806374912ec9146105b357806380d3546b146105d157806383083464146105ef57610271565b80632f745c59116101e857806342966c68116101ac57806342966c68146104795780634f6ccce71461049557806359329f69146104c55780635c975abb146104e35780635df6fd9a1461050157806361bf49ee1461051f57610271565b80632f745c59146103eb57806336568abe1461041b5780633f4ba83a14610437578063405ebd4d1461044157806342842e0e1461045d57610271565b80630d24f2dc1161023a5780630d24f2dc1461032b57806314a1042d1461034957806318160ddd1461036557806323b872dd14610383578063248a9ca31461039f5780632f2ff15d146103cf57610271565b806299de2e1461027557806301ffc9a71461029157806306fdde03146102c1578063081812fc146102df578063095ea7b31461030f575b5f80fd5b61028f600480360381019061028a91906132a3565b610837565b005b6102ab60048036038101906102a69190613378565b610a0c565b6040516102b891906133bd565b60405180910390f35b6102c9610a1d565b6040516102d69190613450565b60405180910390f35b6102f960048036038101906102f491906134a3565b610aac565b60405161030691906134dd565b60405180910390f35b610329600480360381019061032491906134f6565b610ac7565b005b610333610add565b6040516103409190613543565b60405180910390f35b610363600480360381019061035e919061355c565b610ae2565b005b61036d610ba3565b60405161037a91906135a9565b60405180910390f35b61039d600480360381019061039891906135c2565b610baf565b005b6103b960048036038101906103b49190613645565b610cae565b6040516103c6919061367f565b60405180910390f35b6103e960048036038101906103e49190613698565b610ccb565b005b610405600480360381019061040091906134f6565b610ced565b60405161041291906135a9565b60405180910390f35b61043560048036038101906104309190613698565b610d91565b005b61043f610e0c565b005b61045b600480360381019061045691906136d6565b610e23565b005b610477600480360381019061047291906135c2565b610e73565b005b610493600480360381019061048e91906134a3565b610e92565b005b6104af60048036038101906104aa91906134a3565b610ea8565b6040516104bc91906135a9565b60405180910390f35b6104cd610f1a565b6040516104da919061375c565b60405180910390f35b6104eb610f3f565b6040516104f891906133bd565b60405180910390f35b610509610f54565b6040516105169190613543565b60405180910390f35b610539600480360381019061053491906134a3565b610f59565b60405161054a959493929190613775565b60405180910390f35b61056d600480360381019061056891906134a3565b610fb7565b60405161057a91906134dd565b60405180910390f35b61059d600480360381019061059891906136d6565b610fc8565b6040516105aa91906135a9565b60405180910390f35b6105bb61107e565b6040516105c891906137e6565b60405180910390f35b6105d96110a3565b6040516105e69190613543565b60405180910390f35b610609600480360381019061060491906134a3565b6110a8565b005b610613611504565b005b61062f600480360381019061062a91906134a3565b61151b565b60405161063c91906135a9565b60405180910390f35b61064d61154b565b60405161065a919061381f565b60405180910390f35b61067d60048036038101906106789190613698565b611570565b60405161068a91906133bd565b60405180910390f35b61069b6115d4565b6040516106a89190613450565b60405180910390f35b6106b9611664565b6040516106c6919061367f565b60405180910390f35b6106e960048036038101906106e49190613862565b61166a565b005b6106f3611680565b604051610700919061367f565b60405180910390f35b6107116116a4565b60405161071e91906138c0565b60405180910390f35b610741600480360381019061073c9190613977565b6116c9565b005b61074b6116e6565b60405161075891906134dd565b60405180910390f35b61077b600480360381019061077691906134a3565b6116fe565b6040516107889190613450565b60405180910390f35b610799611710565b6040516107a69190613543565b60405180910390f35b6107b7611715565b6040516107c49190613a17565b60405180910390f35b6107e760048036038101906107e29190613698565b61173a565b005b61080360048036038101906107fe9190613a30565b61175c565b60405161081091906133bd565b60405180910390f35b6108216117ea565b60405161082e9190613543565b60405180910390f35b7f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa88610861816117ef565b61088b7f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa8833611570565b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613ade565b60405180910390fd5b5f600d5f8154809291906108dd90613b29565b9190505590506108ed8682611803565b6108f78186611820565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610a04576040518060a0016040528060018152602001600181526020014281526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018460ff16815250600f5f8381526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030160146101000a81548160ff021916908360ff1602179055509050505b505050505050565b5f610a168261187a565b9050919050565b60605f8054610a2b90613b9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790613b9d565b8015610aa25780601f10610a7957610100808354040283529160200191610aa2565b820191905f5260205f20905b815481529060010190602001808311610a8557829003601f168201915b5050505050905090565b5f610ab6826118f3565b50610ac082611979565b9050919050565b610ad98282610ad46119b2565b6119b9565b5050565b600281565b7f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa88610b0c816117ef565b610b367f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa8833611570565b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90613ade565b60405180910390fd5b81600f5f8581526020019081526020015f205f015f828254610b979190613bcd565b92505081905550505050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c1f575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610c1691906134dd565b60405180910390fd5b5f610c328383610c2d6119b2565b6119cb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca8578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610c9f93929190613c00565b60405180910390fd5b50505050565b5f600c5f8381526020019081526020015f20600101549050919050565b610cd482610cae565b610cdd816117ef565b610ce783836119e0565b50505050565b5f610cf783610fc8565b8210610d3c5782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610d33929190613c35565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b610d996119b2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e078282611aca565b505050565b5f801b610e18816117ef565b610e20611bb4565b50565b5f801b610e2f816117ef565b81600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e8d83838360405180602001604052805f8152506116c9565b505050565b610ea45f82610e9f6119b2565b6119cb565b5050565b5f610eb1610ba3565b8210610ef6575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610eed929190613c35565b60405180910390fd5b60088281548110610f0a57610f09613c5c565b5b905f5260205f2001549050919050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b5f9054906101000a900460ff16905090565b600381565b600f602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160149054906101000a900460ff16905085565b5f610fc1826118f3565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611039575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161103091906134dd565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481565b3373ffffffffffffffffffffffffffffffffffffffff166110c882610fb7565b73ffffffffffffffffffffffffffffffffffffffff161461111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613cf9565b60405180910390fd5b5f600f5f8381526020019081526020015f2090505f8160020154426111439190613d17565b90505f61114f8461151b565b90505f828261115e9190613d4a565b90505f670de0b6b3a7640000826111759190613d4a565b90504285600201819055505f856003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90613dfb565b60405180910390fd5b60028660030160149054906101000a900460ff1660ff16036112bf5760105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b815260040161128d929190613c35565b5f604051808303815f87803b1580156112a4575f80fd5b505af11580156112b6573d5f803e3d5ffd5b505050506114fb565b60038660030160149054906101000a900460ff1660ff16036113695760115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401611337929190613c35565b5f604051808303815f87803b15801561134e575f80fd5b505af1158015611360573d5f803e3d5ffd5b505050506114fa565b60048660030160149054906101000a900460ff1660ff16036114135760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b81526004016113e1929190613c35565b5f604051808303815f87803b1580156113f8575f80fd5b505af115801561140a573d5f803e3d5ffd5b505050506114f9565b60058660030160149054906101000a900460ff1660ff16036114bd5760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b815260040161148b929190613c35565b5f604051808303815f87803b1580156114a2575f80fd5b505af11580156114b4573d5f803e3d5ffd5b505050506114f8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613dfb565b60405180910390fd5b5b5b5b50505050505050565b5f801b611510816117ef565b611518611c15565b50565b5f80600f5f8481526020019081526020015f209050805f015481600101546115439190613d4a565b915050919050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600180546115e390613b9d565b80601f016020809104026020016040519081016040528092919081815260200182805461160f90613b9d565b801561165a5780601f106116315761010080835404028352916020019161165a565b820191905f5260205f20905b81548152906001019060200180831161163d57829003601f168201915b5050505050905090565b5f801b81565b61167c6116756119b2565b8383611c77565b5050565b7f6a64baf327d646d1bca72653e2a075d15fd6ac6d8cbd7f6ee03fc55875e0fa8881565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116d4848484610baf565b6116e084848484611de0565b50505050565b73ba542069e122522b3564a4b50e867b82a3f072ed81565b606061170982611f92565b9050919050565b600581565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174382610cae565b61174c816117ef565b6117568383611aca565b50505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600181565b611800816117fb6119b2565b61209d565b50565b61181c828260405180602001604052805f8152506120ee565b5050565b80600a5f8481526020019081526020015f20908161183e9190613fad565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161186e91906135a9565b60405180910390a15050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118ec57506118eb82612109565b5b9050919050565b5f806118fe83612169565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361197057826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161196791906135a9565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6119c683838360016121a2565b505050565b5f6119d7848484612361565b90509392505050565b5f6119eb8383611570565b611ac0576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611a5d6119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611ac4565b5f90505b92915050565b5f611ad58383611570565b15611baa575f600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611b476119b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611bae565b5f90505b92915050565b611bbc61237e565b5f600b5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611bfe6119b2565b604051611c0b91906134dd565b60405180910390a1565b611c1d6123be565b6001600b5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c606119b2565b604051611c6d91906134dd565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce757816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611cde91906134dd565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dd391906133bd565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611f8c578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e236119b2565b8685856040518563ffffffff1660e01b8152600401611e4594939291906140ce565b6020604051808303815f875af1925050508015611e8057506040513d601f19601f82011682018060405250810190611e7d919061412c565b60015b611f01573d805f8114611eae576040519150601f19603f3d011682016040523d82523d5f602084013e611eb3565b606091505b505f815103611ef957836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611ef091906134dd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f8191906134dd565b60405180910390fd5b505b50505050565b6060611f9d826118f3565b505f600a5f8481526020019081526020015f208054611fbb90613b9d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe790613b9d565b80156120325780601f1061200957610100808354040283529160200191612032565b820191905f5260205f20905b81548152906001019060200180831161201557829003601f168201915b505050505090505f6120426123ff565b90505f815103612056578192505050612098565b5f8251111561208a578082604051602001612072929190614191565b60405160208183030381529060405292505050612098565b61209384612415565b925050505b919050565b6120a78282611570565b6120ea5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016120e19291906141b4565b60405180910390fd5b5050565b6120f8838361247b565b6121045f848484611de0565b505050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061216257506121618261256e565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806121da57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561230c575f6121e9846118f3565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750612264818461175c565b155b156122a857826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161229f91906134dd565b60405180910390fd5b811561230a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f61236a6123be565b6123758484846125e7565b90509392505050565b612386610f3f565b6123bc576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6123c6610f3f565b156123fd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b606060405180602001604052805f815250905090565b6060612420826118f3565b505f61242a6123ff565b90505f8151116124485760405180602001604052805f815250612473565b8061245284612701565b604051602001612463929190614191565b6040516020818303038152906040525b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124eb575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016124e291906134dd565b60405180910390fd5b5f6124f783835f6119cb565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612569575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161256091906134dd565b60405180910390fd5b505050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125e057506125df826127cb565b5b9050919050565b5f806125f48585856128ac565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126375761263284612ab7565b612676565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612675576126748185612afb565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036126b7576126b284612c45565b6126f6565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146126f5576126f48585612d05565b5b5b809150509392505050565b60605f600161270f84612d89565b0190505f8167ffffffffffffffff81111561272d5761272c613149565b5b6040519080825280601f01601f19166020018201604052801561275f5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156127c0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816127b5576127b46141db565b5b0494505f850361276c575b819350505050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061289557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128a557506128a482612eda565b5b9050919050565b5f806128b784612169565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128f8576128f7818486612f43565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612983576129375f855f806121a2565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612a0257600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f612b0583610fc8565b90505f60075f8481526020019081526020015f20549050818114612bdc575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f6001600880549050612c589190613d17565b90505f60095f8481526020019081526020015f205490505f60088381548110612c8457612c83613c5c565b5b905f5260205f20015490508060088381548110612ca457612ca3613c5c565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480612cec57612ceb614208565b5b600190038181905f5260205f20015f9055905550505050565b5f6001612d1184610fc8565b612d1b9190613d17565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612de5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ddb57612dda6141db565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612e22576d04ee2d6d415b85acef81000000008381612e1857612e176141db565b5b0492506020810190505b662386f26fc100008310612e5157662386f26fc100008381612e4757612e466141db565b5b0492506010810190505b6305f5e1008310612e7a576305f5e1008381612e7057612e6f6141db565b5b0492506008810190505b6127108310612e9f576127108381612e9557612e946141db565b5b0492506004810190505b60648310612ec25760648381612eb857612eb76141db565b5b0492506002810190505b600a8310612ed1576001810190505b80915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f4e838383613006565b613001575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc257806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612fb991906135a9565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612ff8929190613c35565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130bd57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061307e575061307d848461175c565b5b806130bc57508273ffffffffffffffffffffffffffffffffffffffff166130a483611979565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613100826130d7565b9050919050565b613110816130f6565b811461311a575f80fd5b50565b5f8135905061312b81613107565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61317f82613139565b810181811067ffffffffffffffff8211171561319e5761319d613149565b5b80604052505050565b5f6131b06130c6565b90506131bc8282613176565b919050565b5f67ffffffffffffffff8211156131db576131da613149565b5b6131e482613139565b9050602081019050919050565b828183375f83830152505050565b5f61321161320c846131c1565b6131a7565b90508281526020810184848401111561322d5761322c613135565b5b6132388482856131f1565b509392505050565b5f82601f83011261325457613253613131565b5b81356132648482602086016131ff565b91505092915050565b5f60ff82169050919050565b6132828161326d565b811461328c575f80fd5b50565b5f8135905061329d81613279565b92915050565b5f805f80608085870312156132bb576132ba6130cf565b5b5f6132c88782880161311d565b945050602085013567ffffffffffffffff8111156132e9576132e86130d3565b5b6132f587828801613240565b93505060406133068782880161311d565b92505060606133178782880161328f565b91505092959194509250565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61335781613323565b8114613361575f80fd5b50565b5f813590506133728161334e565b92915050565b5f6020828403121561338d5761338c6130cf565b5b5f61339a84828501613364565b91505092915050565b5f8115159050919050565b6133b7816133a3565b82525050565b5f6020820190506133d05f8301846133ae565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561340d5780820151818401526020810190506133f2565b5f8484015250505050565b5f613422826133d6565b61342c81856133e0565b935061343c8185602086016133f0565b61344581613139565b840191505092915050565b5f6020820190508181035f8301526134688184613418565b905092915050565b5f819050919050565b61348281613470565b811461348c575f80fd5b50565b5f8135905061349d81613479565b92915050565b5f602082840312156134b8576134b76130cf565b5b5f6134c58482850161348f565b91505092915050565b6134d7816130f6565b82525050565b5f6020820190506134f05f8301846134ce565b92915050565b5f806040838503121561350c5761350b6130cf565b5b5f6135198582860161311d565b925050602061352a8582860161348f565b9150509250929050565b61353d8161326d565b82525050565b5f6020820190506135565f830184613534565b92915050565b5f8060408385031215613572576135716130cf565b5b5f61357f8582860161348f565b92505060206135908582860161348f565b9150509250929050565b6135a381613470565b82525050565b5f6020820190506135bc5f83018461359a565b92915050565b5f805f606084860312156135d9576135d86130cf565b5b5f6135e68682870161311d565b93505060206135f78682870161311d565b92505060406136088682870161348f565b9150509250925092565b5f819050919050565b61362481613612565b811461362e575f80fd5b50565b5f8135905061363f8161361b565b92915050565b5f6020828403121561365a576136596130cf565b5b5f61366784828501613631565b91505092915050565b61367981613612565b82525050565b5f6020820190506136925f830184613670565b92915050565b5f80604083850312156136ae576136ad6130cf565b5b5f6136bb85828601613631565b92505060206136cc8582860161311d565b9150509250929050565b5f602082840312156136eb576136ea6130cf565b5b5f6136f88482850161311d565b91505092915050565b5f819050919050565b5f61372461371f61371a846130d7565b613701565b6130d7565b9050919050565b5f6137358261370a565b9050919050565b5f6137468261372b565b9050919050565b6137568161373c565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f60a0820190506137885f83018861359a565b613795602083018761359a565b6137a2604083018661359a565b6137af60608301856134ce565b6137bc6080830184613534565b9695505050505050565b5f6137d08261372b565b9050919050565b6137e0816137c6565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f6138098261372b565b9050919050565b613819816137ff565b82525050565b5f6020820190506138325f830184613810565b92915050565b613841816133a3565b811461384b575f80fd5b50565b5f8135905061385c81613838565b92915050565b5f8060408385031215613878576138776130cf565b5b5f6138858582860161311d565b92505060206138968582860161384e565b9150509250929050565b5f6138aa8261372b565b9050919050565b6138ba816138a0565b82525050565b5f6020820190506138d35f8301846138b1565b92915050565b5f67ffffffffffffffff8211156138f3576138f2613149565b5b6138fc82613139565b9050602081019050919050565b5f61391b613916846138d9565b6131a7565b90508281526020810184848401111561393757613936613135565b5b6139428482856131f1565b509392505050565b5f82601f83011261395e5761395d613131565b5b813561396e848260208601613909565b91505092915050565b5f805f806080858703121561398f5761398e6130cf565b5b5f61399c8782880161311d565b94505060206139ad8782880161311d565b93505060406139be8782880161348f565b925050606085013567ffffffffffffffff8111156139df576139de6130d3565b5b6139eb8782880161394a565b91505092959194509250565b5f613a018261372b565b9050919050565b613a11816139f7565b82525050565b5f602082019050613a2a5f830184613a08565b92915050565b5f8060408385031215613a4657613a456130cf565b5b5f613a538582860161311d565b9250506020613a648582860161311d565b9150509250929050565b7f4c616e64506c6f74733a2043616c6c657220646f65736e2774206861766520475f8201527f414d455f524f4c45000000000000000000000000000000000000000000000000602082015250565b5f613ac86028836133e0565b9150613ad382613a6e565b604082019050919050565b5f6020820190508181035f830152613af581613abc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b3382613470565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b6557613b64613afc565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bb457607f821691505b602082108103613bc757613bc6613b70565b5b50919050565b5f613bd782613470565b9150613be283613470565b9250828201905080821115613bfa57613bf9613afc565b5b92915050565b5f606082019050613c135f8301866134ce565b613c20602083018561359a565b613c2d60408301846134ce565b949350505050565b5f604082019050613c485f8301856134ce565b613c55602083018461359a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4c616e64506c6f74733a20596f7520646f6e2774206f776e207468697320706c5f8201527f6f74000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ce36022836133e0565b9150613cee82613c89565b604082019050919050565b5f6020820190508181035f830152613d1081613cd7565b9050919050565b5f613d2182613470565b9150613d2c83613470565b9250828203905081811115613d4457613d43613afc565b5b92915050565b5f613d5482613470565b9150613d5f83613470565b9250828202613d6d81613470565b91508282048414831517613d8457613d83613afc565b5b5092915050565b7f4c616e64506c6f74733a20496e76616c6964207265736f7572636520746f6b655f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f613de56021836133e0565b9150613df082613d8b565b604082019050919050565b5f6020820190508181035f830152613e1281613dd9565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e3a565b613e7f8683613e3a565b95508019841693508086168417925050509392505050565b5f613eb1613eac613ea784613470565b613701565b613470565b9050919050565b5f819050919050565b613eca83613e97565b613ede613ed682613eb8565b848454613e46565b825550505050565b5f90565b613ef2613ee6565b613efd818484613ec1565b505050565b5b81811015613f2057613f155f82613eea565b600181019050613f03565b5050565b601f821115613f6557613f3681613e19565b613f3f84613e2b565b81016020851015613f4e578190505b613f62613f5a85613e2b565b830182613f02565b50505b505050565b5f82821c905092915050565b5f613f855f1984600802613f6a565b1980831691505092915050565b5f613f9d8383613f76565b9150826002028217905092915050565b613fb6826133d6565b67ffffffffffffffff811115613fcf57613fce613149565b5b613fd98254613b9d565b613fe4828285613f24565b5f60209050601f831160018114614015575f8415614003578287015190505b61400d8582613f92565b865550614074565b601f19841661402386613e19565b5f5b8281101561404a57848901518255600182019150602085019450602081019050614025565b868310156140675784890151614063601f891682613f76565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f6140a08261407c565b6140aa8185614086565b93506140ba8185602086016133f0565b6140c381613139565b840191505092915050565b5f6080820190506140e15f8301876134ce565b6140ee60208301866134ce565b6140fb604083018561359a565b818103606083015261410d8184614096565b905095945050505050565b5f815190506141268161334e565b92915050565b5f60208284031215614141576141406130cf565b5b5f61414e84828501614118565b91505092915050565b5f81905092915050565b5f61416b826133d6565b6141758185614157565b93506141858185602086016133f0565b80840191505092915050565b5f61419c8285614161565b91506141a88284614161565b91508190509392505050565b5f6040820190506141c75f8301856134ce565b6141d46020830184613670565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122061be4f1fffa839d26a3147b5925e3296380576461eaddecd18b6584c83de20f964736f6c634300081800330000000000000000000000007da70b2d0d44cbb6dd0cd9f87bf4850f8596f3f1000000000000000000000000d128e3d4d04b71bec6385a32171fe2ee30a57c8e0000000000000000000000000ec5b0678ec137e7fb4d8b45b51c12a2ec5cdcd90000000000000000000000009f50062d70d87c009b9d085adaec2d69c669e344