6080604052620f4240600755348015610016575f80fd5b506040518060400160405280600e81526020017f5765696768746564566f74696e670000000000000000000000000000000000008152506040518060400160405280600281526020017f57560000000000000000000000000000000000000000000000000000000000008152508160039081610092919061036a565b5080600490816100a2919061036a565b5050505f600860018160018154018082558091505003905f5260205f20906009020190506040518060400160405280600581526020017f6275726e7400000000000000000000000000000000000000000000000000000081525081600201908161010c919061036a565b5060018160080160016101000a81548160ff02191690831515021790555050610439565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101ab57607f821691505b6020821081036101be576101bd610167565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101e5565b61022a86836101e5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61026e61026961026484610242565b61024b565b610242565b9050919050565b5f819050919050565b61028783610254565b61029b61029382610275565b8484546101f1565b825550505050565b5f90565b6102af6102a3565b6102ba81848461027e565b505050565b5b818110156102dd576102d25f826102a7565b6001810190506102c0565b5050565b601f821115610322576102f3816101c4565b6102fc846101d6565b8101602085101561030b578190505b61031f610317856101d6565b8301826102bf565b50505b505050565b5f82821c905092915050565b5f6103425f1984600802610327565b1980831691505092915050565b5f61035a8383610333565b9150826002028217905092915050565b61037382610130565b67ffffffffffffffff81111561038c5761038b61013a565b5b6103968254610194565b6103a18282856102e1565b5f60209050601f8311600181146103d2575f84156103c0578287015190505b6103ca858261034f565b865550610431565b601f1984166103e0866101c4565b5f5b82811015610407578489015182556001820191506020850194506020810190506103e2565b868310156104245784890151610420601f891682610333565b8355505b6001600288020188555050505b505050505050565b611dd3806104465f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c806373b2e80e11610095578063976b311311610064578063976b3113146102c0578063a9059cbb146102f0578063d5abeb0114610320578063dd62ed3e1461033e576100fe565b806373b2e80e146102265780638615d85514610256578063943e82161461028657806395d89b41146102a2576100fe565b806327e235e3116100d157806327e235e31461019e578063313ce567146101ce5780634e71d92d146101ec57806370a08231146101f6576100fe565b806306fdde0314610102578063095ea7b31461012057806318160ddd1461015057806323b872dd1461016e575b5f80fd5b61010a61036e565b60405161011791906113ca565b60405180910390f35b61013a6004803603810190610135919061147f565b6103fe565b60405161014791906114d7565b60405180910390f35b610158610420565b60405161016591906114ff565b60405180910390f35b61018860048036038101906101839190611518565b610429565b60405161019591906114d7565b60405180910390f35b6101b860048036038101906101b39190611568565b610457565b6040516101c591906114ff565b60405180910390f35b6101d661046c565b6040516101e391906115ae565b60405180910390f35b6101f4610474565b005b610210600480360381019061020b9190611568565b610599565b60405161021d91906114ff565b60405180910390f35b610240600480360381019061023b9190611568565b6105de565b60405161024d91906114d7565b60405180910390f35b610270600480360381019061026b9190611628565b6105fb565b60405161027d91906114ff565b60405180910390f35b6102a0600480360381019061029b91906116a8565b6106e3565b005b6102aa61093c565b6040516102b791906113ca565b60405180910390f35b6102da60048036038101906102d591906116e6565b6109cc565b6040516102e791906118f7565b60405180910390f35b61030a6004803603810190610305919061147f565b610b0c565b60405161031791906114d7565b60405180910390f35b610328610b2e565b60405161033591906114ff565b60405180910390f35b61035860048036038101906103539190611917565b610b34565b60405161036591906114ff565b60405180910390f35b60606003805461037d90611982565b80601f01602080910402602001604051908101604052809291908181526020018280546103a990611982565b80156103f45780601f106103cb576101008083540402835291602001916103f4565b820191905f5260205f20905b8154815290600101906020018083116103d757829003601f168201915b5050505050905090565b5f80610408610bb6565b9050610415818585610bbd565b600191505092915050565b5f600254905090565b5f80610433610bb6565b9050610440858285610bcf565b61044b858585610c61565b60019150509392505050565b6005602052805f5260405f205f915090505481565b5f6012905090565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156104f5576040517f0b1327a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754610500610420565b10610537576040517fcbe2483100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610597336064610d51565b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f8061060633610599565b0361063d576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610645610420565b82111561068957816040517f589a495200000000000000000000000000000000000000000000000000000000815260040161068091906114ff565b60405180910390fd5b5f600860018160018154018082558091505003905f5260205f209060090201905084848260020191826106bd929190611b86565b5082816007018190555060016008805490506106d99190611c80565b9150509392505050565b5f600883815481106106f8576106f7611cb3565b5b905f5260205f20906009020190508060080160019054906101000a900460ff161561074f576040517f66b6cb4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076433825f01610dd090919063ffffffff16565b1561079b576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6107a533610599565b036107dc576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107f133825f01610dfd90919063ffffffff16565b506107fb33610599565b816006015f82825461080d9190611ce0565b925050819055505f600281111561082757610826611d13565b5b82600281111561083a57610839611d13565b5b036108665761084833610599565b816003015f82825461085a9190611ce0565b925050819055506108dd565b6001600281111561087a57610879611d13565b5b82600281111561088d5761088c611d13565b5b036108b95761089b33610599565b816004015f8282546108ad9190611ce0565b925050819055506108dc565b6108c233610599565b816005015f8282546108d49190611ce0565b925050819055505b5b806007015481600601541061093757806004015481600301541115610919576001816008015f6101000a81548160ff0219169083151502179055505b60018160080160016101000a81548160ff0219169083151502179055505b505050565b60606004805461094b90611982565b80601f016020809104026020016040519081016040528092919081815260200182805461097790611982565b80156109c25780601f10610999576101008083540402835291602001916109c2565b820191905f5260205f20905b8154815290600101906020018083116109a557829003601f168201915b5050505050905090565b6109d4611311565b5f600883815481106109e9576109e8611cb3565b5b905f5260205f2090600902019050604051806101200160405280610a0e835f01610e2a565b8152602001826002018054610a2290611982565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90611982565b8015610a995780601f10610a7057610100808354040283529160200191610a99565b820191905f5260205f20905b815481529060010190602001808311610a7c57829003601f168201915b505050505081526020018260030154815260200182600401548152602001826005015481526020018260060154815260200182600701548152602001826008015f9054906101000a900460ff16151581526020018260080160019054906101000a900460ff161515815250915050919050565b5f80610b16610bb6565b9050610b23818585610c61565b600191505092915050565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610bca8383836001610e49565b505050565b5f610bda8484610b34565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c5b5781811015610c4c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c4393929190611d4f565b60405180910390fd5b610c5a84848484035f610e49565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd1575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cc89190611d84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d41575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d389190611d84565b60405180910390fd5b610d4c838383611018565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc1575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610db89190611d84565b60405180910390fd5b610dcc5f8383611018565b5050565b5f610df5835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611231565b905092915050565b5f610e22835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611251565b905092915050565b60605f610e38835f016112b8565b905060608190508092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610eb9575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610eb09190611d84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f29575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f209190611d84565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611012578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161100991906114ff565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611068578060025f82825461105c9190611ce0565b92505081905550611136565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110f1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110e893929190611d4f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117d578060025f82825403925050819055506111c7565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161122491906114ff565b60405180910390a3505050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f61125c8383611231565b6112ae57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f2081905550600190506112b2565b5f90505b92915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561130557602002820191905f5260205f20905b8154815260200190600101908083116112f1575b50505050509050919050565b60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f151581525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61139c8261135a565b6113a68185611364565b93506113b6818560208601611374565b6113bf81611382565b840191505092915050565b5f6020820190508181035f8301526113e28184611392565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61141b826113f2565b9050919050565b61142b81611411565b8114611435575f80fd5b50565b5f8135905061144681611422565b92915050565b5f819050919050565b61145e8161144c565b8114611468575f80fd5b50565b5f8135905061147981611455565b92915050565b5f8060408385031215611495576114946113ea565b5b5f6114a285828601611438565b92505060206114b38582860161146b565b9150509250929050565b5f8115159050919050565b6114d1816114bd565b82525050565b5f6020820190506114ea5f8301846114c8565b92915050565b6114f98161144c565b82525050565b5f6020820190506115125f8301846114f0565b92915050565b5f805f6060848603121561152f5761152e6113ea565b5b5f61153c86828701611438565b935050602061154d86828701611438565b925050604061155e8682870161146b565b9150509250925092565b5f6020828403121561157d5761157c6113ea565b5b5f61158a84828501611438565b91505092915050565b5f60ff82169050919050565b6115a881611593565b82525050565b5f6020820190506115c15f83018461159f565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126115e8576115e76115c7565b5b8235905067ffffffffffffffff811115611605576116046115cb565b5b602083019150836001820283011115611621576116206115cf565b5b9250929050565b5f805f6040848603121561163f5761163e6113ea565b5b5f84013567ffffffffffffffff81111561165c5761165b6113ee565b5b611668868287016115d3565b9350935050602061167b8682870161146b565b9150509250925092565b60038110611691575f80fd5b50565b5f813590506116a281611685565b92915050565b5f80604083850312156116be576116bd6113ea565b5b5f6116cb8582860161146b565b92505060206116dc85828601611694565b9150509250929050565b5f602082840312156116fb576116fa6113ea565b5b5f6117088482850161146b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61174381611411565b82525050565b5f611754838361173a565b60208301905092915050565b5f602082019050919050565b5f61177682611711565b611780818561171b565b935061178b8361172b565b805f5b838110156117bb5781516117a28882611749565b97506117ad83611760565b92505060018101905061178e565b5085935050505092915050565b5f82825260208201905092915050565b5f6117e28261135a565b6117ec81856117c8565b93506117fc818560208601611374565b61180581611382565b840191505092915050565b6118198161144c565b82525050565b611828816114bd565b82525050565b5f61012083015f8301518482035f860152611849828261176c565b9150506020830151848203602086015261186382826117d8565b91505060408301516118786040860182611810565b50606083015161188b6060860182611810565b50608083015161189e6080860182611810565b5060a08301516118b160a0860182611810565b5060c08301516118c460c0860182611810565b5060e08301516118d760e086018261181f565b506101008301516118ec61010086018261181f565b508091505092915050565b5f6020820190508181035f83015261190f818461182e565b905092915050565b5f806040838503121561192d5761192c6113ea565b5b5f61193a85828601611438565b925050602061194b85828601611438565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061199957607f821691505b6020821081036119ac576119ab611955565b5b50919050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611a457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a0a565b611a4f8683611a0a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a8a611a85611a808461144c565b611a67565b61144c565b9050919050565b5f819050919050565b611aa383611a70565b611ab7611aaf82611a91565b848454611a16565b825550505050565b5f90565b611acb611abf565b611ad6818484611a9a565b505050565b5b81811015611af957611aee5f82611ac3565b600181019050611adc565b5050565b601f821115611b3e57611b0f816119e9565b611b18846119fb565b81016020851015611b27578190505b611b3b611b33856119fb565b830182611adb565b50505b505050565b5f82821c905092915050565b5f611b5e5f1984600802611b43565b1980831691505092915050565b5f611b768383611b4f565b9150826002028217905092915050565b611b9083836119b2565b67ffffffffffffffff811115611ba957611ba86119bc565b5b611bb38254611982565b611bbe828285611afd565b5f601f831160018114611beb575f8415611bd9578287013590505b611be38582611b6b565b865550611c4a565b601f198416611bf9866119e9565b5f5b82811015611c2057848901358255600182019150602085019450602081019050611bfb565b86831015611c3d5784890135611c39601f891682611b4f565b8355505b6001600288020188555050505b50505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c8a8261144c565b9150611c958361144c565b9250828203905081811115611cad57611cac611c53565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cea8261144c565b9150611cf58361144c565b9250828201905080821115611d0d57611d0c611c53565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b611d4981611411565b82525050565b5f606082019050611d625f830186611d40565b611d6f60208301856114f0565b611d7c60408301846114f0565b949350505050565b5f602082019050611d975f830184611d40565b9291505056fea2646970667358221220f8e8e2dbc747d45898380de8b13ba70e35d1997536c684b5a9985075e585c92664736f6c634300081a0033