60806040525f60075f6101000a81548160ff021916908315150217905550348015610028575f80fd5b506040518060400160405280600981526020017f57617761546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f574157410000000000000000000000000000000000000000000000000000000081525081600390816100a4919061063f565b5080600490816100b4919061063f565b5050503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061010561015f60201b60201c565b600a6101119190610876565b60068190555061015a60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006546402540be40061014f91906108c0565b61016760201b60201c565b6109e9565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101d7575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016101ce9190610940565b60405180910390fd5b6101e85f83836101ec60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361023c578060025f8282546102309190610959565b9250508190555061030a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156102c5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102bc9392919061099b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610351578060025f828254039250508190555061039b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103f891906109d0565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061048057607f821691505b6020821081036104935761049261043c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104ba565b6104ff86836104ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61054361053e61053984610517565b610520565b610517565b9050919050565b5f819050919050565b61055c83610529565b6105706105688261054a565b8484546104c6565b825550505050565b5f90565b610584610578565b61058f818484610553565b505050565b5b818110156105b2576105a75f8261057c565b600181019050610595565b5050565b601f8211156105f7576105c881610499565b6105d1846104ab565b810160208510156105e0578190505b6105f46105ec856104ab565b830182610594565b50505b505050565b5f82821c905092915050565b5f6106175f19846008026105fc565b1980831691505092915050565b5f61062f8383610608565b9150826002028217905092915050565b61064882610405565b67ffffffffffffffff8111156106615761066061040f565b5b61066b8254610469565b6106768282856105b6565b5f60209050601f8311600181146106a7575f8415610695578287015190505b61069f8582610624565b865550610706565b601f1984166106b586610499565b5f5b828110156106dc578489015182556001820191506020850194506020810190506106b7565b868310156106f957848901516106f5601f891682610608565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156107905780860481111561076c5761076b61070e565b5b600185161561077b5780820291505b80810290506107898561073b565b9450610750565b94509492505050565b5f826107a85760019050610863565b816107b5575f9050610863565b81600181146107cb57600281146107d557610804565b6001915050610863565b60ff8411156107e7576107e661070e565b5b8360020a9150848211156107fe576107fd61070e565b5b50610863565b5060208310610133831016604e8410600b84101617156108395782820a9050838111156108345761083361070e565b5b610863565b6108468484846001610747565b9250905081840481111561085d5761085c61070e565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61088082610517565b915061088b8361086a565b92506108b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610799565b905092915050565b5f6108ca82610517565b91506108d583610517565b92508282026108e381610517565b915082820484148315176108fa576108f961070e565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61092a82610901565b9050919050565b61093a81610920565b82525050565b5f6020820190506109535f830184610931565b92915050565b5f61096382610517565b915061096e83610517565b92508282019050808211156109865761098561070e565b5b92915050565b61099581610517565b82525050565b5f6060820190506109ae5f830186610931565b6109bb602083018561098c565b6109c8604083018461098c565b949350505050565b5f6020820190506109e35f83018461098c565b92915050565b6132f1806109f65f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80638456cb59116100f7578063dd62ed3e11610095578063f9f92be41161006f578063f9f92be414610482578063fd0708d1146104b2578063fe7cfb31146104d0578063fee2f7a3146104ee576101a7565b8063dd62ed3e1461042c578063e72e30641461045c578063f3290d7514610466576101a7565b8063a0712d68116100d1578063a0712d68146103a8578063a9059cbb146103c4578063bd7b572e146103f4578063c481f9d814610410576101a7565b80638456cb59146103625780638da5cb5b1461036c57806395d89b411461038a576101a7565b80633bbab17911610164578063537df3b61161013e578063537df3b6146102d95780635c975abb146102f55780635fe8e7cc1461031357806370a0823114610332576101a7565b80633bbab179146102955780633f4ba83a146102b357806342966c68146102bd576101a7565b806306fdde03146101ab578063095ea7b3146101c957806318160ddd146101f957806323b872dd14610217578063313ce5671461024757806332879d0314610265575b5f80fd5b6101b361051e565b6040516101c091906126db565b60405180910390f35b6101e360048036038101906101de9190612799565b6105ae565b6040516101f091906127f1565b60405180910390f35b6102016105d0565b60405161020e9190612819565b60405180910390f35b610231600480360381019061022c9190612832565b6105d9565b60405161023e91906127f1565b60405180910390f35b61024f61072d565b60405161025c919061289d565b60405180910390f35b61027f600480360381019061027a91906128b6565b610735565b60405161028c9190612819565b60405180910390f35b61029d610753565b6040516102aa9190612998565b60405180910390f35b6102bb6107de565b005b6102d760048036038101906102d291906129b8565b610888565b005b6102f360048036038101906102ee91906128b6565b61097c565b005b6102fd610c65565b60405161030a91906127f1565b60405180910390f35b61031b610c77565b604051610329929190612a9a565b60405180910390f35b61034c600480360381019061034791906128b6565b61104d565b6040516103599190612819565b60405180910390f35b61036a611092565b005b61037461113d565b6040516103819190612ade565b60405180910390f35b610392611162565b60405161039f91906126db565b60405180910390f35b6103c260048036038101906103bd91906129b8565b6111f2565b005b6103de60048036038101906103d99190612799565b6112e6565b6040516103eb91906127f1565b60405180910390f35b61040e60048036038101906104099190612af7565b611438565b005b61042a60048036038101906104259190612ba8565b611626565b005b61044660048036038101906104419190612c05565b611714565b6040516104539190612819565b60405180910390f35b610464611796565b005b610480600480360381019061047b91906128b6565b6118d0565b005b61049c600480360381019061049791906128b6565b611aa1565b6040516104a991906127f1565b60405180910390f35b6104ba611abe565b6040516104c79190612819565b60405180910390f35b6104d8611ac4565b6040516104e591906126db565b60405180910390f35b61050860048036038101906105039190612d7b565b611b95565b6040516105159190612dc2565b60405180910390f35b60606003805461052d90612e0f565b80601f016020809104026020016040519081016040528092919081815260200182805461055990612e0f565b80156105a45780601f1061057b576101008083540402835291602001916105a4565b820191905f5260205f20905b81548152906001019060200180831161058757829003601f168201915b5050505050905090565b5f806105b8611c48565b90506105c5818585611c4f565b600191505092915050565b5f600254905090565b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90612e89565b60405180910390fd5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e590612ef1565b60405180910390fd5b5f6107078585600654866107029190612f3c565b611c61565b905080156107225761071885611c8f565b61072184611c8f565b5b809150509392505050565b5f6012905090565b5f6006546107428361104d565b61074c9190612faa565b9050919050565b606060098054806020026020016040519081016040528092919081815260200182805480156107d457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161078b575b5050505050905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108649061304a565b60405180910390fd5b5f60075f6101000a81548160ff021916908315150217905550565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e9061304a565b60405180910390fd5b61094f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006548361094a9190612f3c565b611fe1565b61097960055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c8f565b50565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a029061304a565b60405180910390fd5b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b906130b2565b60405180910390fd5b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600980549050811015610c61578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610b2257610b216130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c545760096001600980549050610b7991906130fd565b81548110610b8a57610b896130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610bc657610bc56130d0565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009805480610c1d57610c1c613130565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610c61565b8080600101915050610aea565b5050565b60075f9054906101000a900460ff1681565b6060805f600a8054905067ffffffffffffffff811115610c9a57610c99612c43565b5b604051908082528060200260200182016040528015610cc85781602001602082028036833780820191505090505b5090505f600a8054905067ffffffffffffffff811115610ceb57610cea612c43565b5b604051908082528060200260200182016040528015610d195781602001602082028036833780820191505090505b5090505f5b600a80549050811015610e2457600a8181548110610d3f57610d3e6130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110610d7a57610d796130d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610df8600a8281548110610dcb57610dca6130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661104d565b828281518110610e0b57610e0a6130d0565b5b6020026020010181815250508080600101915050610d1e565b505f5b60018251610e3591906130fd565b811015611040575f5b6001828451610e4d91906130fd565b610e5791906130fd565b8110156110325782600182610e6c919061315d565b81518110610e7d57610e7c6130d0565b5b6020026020010151838281518110610e9857610e976130d0565b5b60200260200101511015611025575f838281518110610eba57610eb96130d0565b5b6020026020010151905083600183610ed2919061315d565b81518110610ee357610ee26130d0565b5b6020026020010151848381518110610efe57610efd6130d0565b5b6020026020010181815250508084600184610f19919061315d565b81518110610f2a57610f296130d0565b5b6020026020010181815250505f858381518110610f4a57610f496130d0565b5b6020026020010151905085600184610f62919061315d565b81518110610f7357610f726130d0565b5b6020026020010151868481518110610f8e57610f8d6130d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508086600185610fd7919061315d565b81518110610fe857610fe76130d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050505b8080600101915050610e3e565b508080600101915050610e27565b5081819350935050509091565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111189061304a565b60405180910390fd5b600160075f6101000a81548160ff021916908315150217905550565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461117190612e0f565b80601f016020809104026020016040519081016040528092919081815260200182805461119d90612e0f565b80156111e85780601f106111bf576101008083540402835291602001916111e8565b820191905f5260205f20905b8154815290600101906020018083116111cb57829003601f168201915b5050505050905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112789061304a565b60405180910390fd5b6112b960055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600654836112b49190612f3c565b612060565b6112e360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c8f565b50565b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890612e89565b60405180910390fd5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612ef1565b60405180910390fd5b5f611413846006548561140e9190612f3c565b6120df565b9050801561142e5761142433611c8f565b61142d84611c8f565b5b8091505092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be9061304a565b60405180910390fd5b5f811180156114d7575060648111155b611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613200565b60405180910390fd5b5f805b600a8054905081101561161f575f600a828154811061153b5761153a6130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f61156f82610735565b9050858110611610575f6064866006548461158a9190612f3c565b6115949190612f3c565b61159e9190612faa565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461160e576115ff888483612101565b808561160b919061315d565b94505b505b50508080600101915050611519565b5050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac9061304a565b60405180910390fd5b5f5b8383905081101561170e57611701338585848181106116d9576116d86130d0565b5b90506020020160208101906116ee91906128b6565b600654856116fc9190612f3c565b612101565b80806001019150506116b7565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c9061304a565b60405180910390fd5b5f5b600a805490508110156118cd575f600a8281548110611849576118486130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506118bf8160055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611c4f565b508080600101915050611827565b50565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119569061304a565b60405180910390fd5b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090613268565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6008602052805f5260405f205f915054906101000a900460ff1681565b60065481565b606060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c9061304a565b60405180910390fd5b5f6040518060400160405280600481526020017f574157410000000000000000000000000000000000000000000000000000000081525090508091505090565b60605f825167ffffffffffffffff811115611bb357611bb2612c43565b5b604051908082528060200260200182016040528015611be15781602001602082028036833780820191505090505b5090505f5b8351811015611c3e57611c12848281518110611c0557611c046130d0565b5b6020026020010151610735565b828281518110611c2557611c246130d0565b5b6020026020010181815250508080600101915050611be6565b5080915050919050565b5f33905090565b611c5c83838360016121f1565b505050565b5f80611c6b611c48565b9050611c788582856123c0565b611c83858585612101565b60019150509392505050565b5f611c998261104d565b118015611ced5750600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611dac57600a81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611fde565b5f611db68261104d565b148015611e095750600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611fdd575f5b600a80549050811015611fdb578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611e4857611e476130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fce57600a6001600a80549050611e9f91906130fd565b81548110611eb057611eaf6130d0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611eec57611eeb6130d0565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a805480611f4357611f42613130565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555f600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611fdb565b8080600101915050611e10565b505b5b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612051575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016120489190612ade565b60405180910390fd5b61205c825f83612452565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d0575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120c79190612ade565b60405180910390fd5b6120db5f8383612452565b5050565b5f806120e9611c48565b90506120f6818585612101565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612171575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016121689190612ade565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e1575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016121d89190612ade565b60405180910390fd5b6121ec838383612452565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612261575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122589190612ade565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d1575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016122c89190612ade565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156123ba578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123b19190612819565b60405180910390a35b50505050565b5f6123cb8484611714565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461244c578181101561243d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161243493929190613286565b60405180910390fd5b61244b84848484035f6121f1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124a2578060025f828254612496919061315d565b92505081905550612570565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561252b578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161252293929190613286565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b7578060025f8282540392505081905550612601565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161265e9190612819565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6126ad8261266b565b6126b78185612675565b93506126c7818560208601612685565b6126d081612693565b840191505092915050565b5f6020820190508181035f8301526126f381846126a3565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127358261270c565b9050919050565b6127458161272b565b811461274f575f80fd5b50565b5f813590506127608161273c565b92915050565b5f819050919050565b61277881612766565b8114612782575f80fd5b50565b5f813590506127938161276f565b92915050565b5f80604083850312156127af576127ae612704565b5b5f6127bc85828601612752565b92505060206127cd85828601612785565b9150509250929050565b5f8115159050919050565b6127eb816127d7565b82525050565b5f6020820190506128045f8301846127e2565b92915050565b61281381612766565b82525050565b5f60208201905061282c5f83018461280a565b92915050565b5f805f6060848603121561284957612848612704565b5b5f61285686828701612752565b935050602061286786828701612752565b925050604061287886828701612785565b9150509250925092565b5f60ff82169050919050565b61289781612882565b82525050565b5f6020820190506128b05f83018461288e565b92915050565b5f602082840312156128cb576128ca612704565b5b5f6128d884828501612752565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6129138161272b565b82525050565b5f612924838361290a565b60208301905092915050565b5f602082019050919050565b5f612946826128e1565b61295081856128eb565b935061295b836128fb565b805f5b8381101561298b5781516129728882612919565b975061297d83612930565b92505060018101905061295e565b5085935050505092915050565b5f6020820190508181035f8301526129b0818461293c565b905092915050565b5f602082840312156129cd576129cc612704565b5b5f6129da84828501612785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a1581612766565b82525050565b5f612a268383612a0c565b60208301905092915050565b5f602082019050919050565b5f612a48826129e3565b612a5281856129ed565b9350612a5d836129fd565b805f5b83811015612a8d578151612a748882612a1b565b9750612a7f83612a32565b925050600181019050612a60565b5085935050505092915050565b5f6040820190508181035f830152612ab2818561293c565b90508181036020830152612ac68184612a3e565b90509392505050565b612ad88161272b565b82525050565b5f602082019050612af15f830184612acf565b92915050565b5f805f60608486031215612b0e57612b0d612704565b5b5f612b1b86828701612752565b9350506020612b2c86828701612785565b9250506040612b3d86828701612785565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612b6857612b67612b47565b5b8235905067ffffffffffffffff811115612b8557612b84612b4b565b5b602083019150836020820283011115612ba157612ba0612b4f565b5b9250929050565b5f805f60408486031215612bbf57612bbe612704565b5b5f84013567ffffffffffffffff811115612bdc57612bdb612708565b5b612be886828701612b53565b93509350506020612bfb86828701612785565b9150509250925092565b5f8060408385031215612c1b57612c1a612704565b5b5f612c2885828601612752565b9250506020612c3985828601612752565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612c7982612693565b810181811067ffffffffffffffff82111715612c9857612c97612c43565b5b80604052505050565b5f612caa6126fb565b9050612cb68282612c70565b919050565b5f67ffffffffffffffff821115612cd557612cd4612c43565b5b602082029050602081019050919050565b5f612cf8612cf384612cbb565b612ca1565b90508083825260208201905060208402830185811115612d1b57612d1a612b4f565b5b835b81811015612d445780612d308882612752565b845260208401935050602081019050612d1d565b5050509392505050565b5f82601f830112612d6257612d61612b47565b5b8135612d72848260208601612ce6565b91505092915050565b5f60208284031215612d9057612d8f612704565b5b5f82013567ffffffffffffffff811115612dad57612dac612708565b5b612db984828501612d4e565b91505092915050565b5f6020820190508181035f830152612dda8184612a3e565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e2657607f821691505b602082108103612e3957612e38612de2565b5b50919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f612e73601583612675565b9150612e7e82612e3f565b602082019050919050565b5f6020820190508181035f830152612ea081612e67565b9050919050565b7f526563697069656e7420697320626c61636b6c697374656400000000000000005f82015250565b5f612edb601883612675565b9150612ee682612ea7565b602082019050919050565b5f6020820190508181035f830152612f0881612ecf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f4682612766565b9150612f5183612766565b9250828202612f5f81612766565b91508282048414831517612f7657612f75612f0f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fb482612766565b9150612fbf83612766565b925082612fcf57612fce612f7d565b5b828204905092915050565b7f536f727279206d616e21204f6e6c7920746865204b696e67206f6620436869575f8201527f615761732063616e2063616c6c20746869732066756e6374696f6e2100000000602082015250565b5f613034603c83612675565b915061303f82612fda565b604082019050919050565b5f6020820190508181035f83015261306181613028565b9050919050565b7f41646472657373206973206e6f7420626c61636b6c69737465642e00000000005f82015250565b5f61309c601b83612675565b91506130a782613068565b602082019050919050565b5f6020820190508181035f8301526130c981613090565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61310782612766565b915061311283612766565b925082820390508181111561312a57613129612f0f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61316782612766565b915061317283612766565b925082820190508082111561318a57613189612f0f565b5b92915050565b7f50657263656e74616765206d757374206265206265747765656e203120616e645f8201527f2031303000000000000000000000000000000000000000000000000000000000602082015250565b5f6131ea602483612675565b91506131f582613190565b604082019050919050565b5f6020820190508181035f830152613217816131de565b9050919050565b7f4164647265737320697320616c726561647920626c61636b6c69737465642e005f82015250565b5f613252601f83612675565b915061325d8261321e565b602082019050919050565b5f6020820190508181035f83015261327f81613246565b9050919050565b5f6060820190506132995f830186612acf565b6132a6602083018561280a565b6132b3604083018461280a565b94935050505056fea26469706673582212201a3765d4f7008834060b107d03db0b6b0b1f7f9b65edba0b41bb6504f5f3fc1264736f6c634300081a0033