0x608060405234801561000f575f80fd5b506040518060400160405280600f81526020017f5472616e7366657261626c654e465400000000000000000000000000000000008152506040518060400160405280600481526020017f544e465400000000000000000000000000000000000000000000000000000000815250815f908161008a91906102e3565b50806001908161009a91906102e3565b5050505f6006819055506103b2565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061012457607f821691505b602082108103610137576101366100e0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261015e565b6101a3868361015e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e76101e26101dd846101bb565b6101c4565b6101bb565b9050919050565b5f819050919050565b610200836101cd565b61021461020c826101ee565b84845461016a565b825550505050565b5f90565b61022861021c565b6102338184846101f7565b505050565b5b818110156102565761024b5f82610220565b600181019050610239565b5050565b601f82111561029b5761026c8161013d565b6102758461014f565b81016020851015610284578190505b6102986102908561014f565b830182610238565b50505b505050565b5f82821c905092915050565b5f6102bb5f19846008026102a0565b1980831691505092915050565b5f6102d383836102ac565b9150826002028217905092915050565b6102ec826100a9565b67ffffffffffffffff811115610305576103046100b3565b5b61030f825461010d565b61031a82828561025a565b5f60209050601f83116001811461034b575f8415610339578287015190505b61034385826102c8565b8655506103aa565b601f1984166103598661013d565b5f5b828110156103805784890151825560018201915060208501945060208101905061035b565b8683101561039d5784890151610399601f8916826102ac565b8355505b6001600288020188555050505b505050505050565b611ef0806103bf5f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c806370a0823111610095578063b88d4fde11610064578063b88d4fde14610294578063c87b56dd146102b0578063d082e381146102e0578063e985e9c5146102fe576100fe565b806370a082311461020e57806394ab67fe1461023e57806395d89b411461025a578063a22cb46514610278576100fe565b806314f710fe116100d157806314f710fe1461019c57806323b872dd146101a657806342842e0e146101c25780636352211e146101de576100fe565b806301ffc9a71461010257806306fdde0314610132578063081812fc14610150578063095ea7b314610180575b5f80fd5b61011c600480360381019061011791906116bf565b61032e565b6040516101299190611704565b60405180910390f35b61013a61040f565b604051610147919061178d565b60405180910390f35b61016a600480360381019061016591906117e0565b61049e565b604051610177919061184a565b60405180910390f35b61019a6004803603810190610195919061188d565b6104b9565b005b6101a46104cf565b005b6101c060048036038101906101bb91906118cb565b6104f4565b005b6101dc60048036038101906101d791906118cb565b6105f3565b005b6101f860048036038101906101f391906117e0565b610612565b604051610205919061184a565b60405180910390f35b6102286004803603810190610223919061191b565b610623565b6040516102359190611955565b60405180910390f35b6102586004803603810190610253919061188d565b6106d9565b005b61026261075e565b60405161026f919061178d565b60405180910390f35b610292600480360381019061028d9190611998565b6107ee565b005b6102ae60048036038101906102a99190611b02565b610804565b005b6102ca60048036038101906102c591906117e0565b610821565b6040516102d7919061178d565b60405180910390f35b6102e8610887565b6040516102f59190611955565b60405180910390f35b61031860048036038101906103139190611b82565b61088d565b6040516103259190611704565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061040857506104078261091b565b5b9050919050565b60605f805461041d90611bed565b80601f016020809104026020016040519081016040528092919081815260200182805461044990611bed565b80156104945780601f1061046b57610100808354040283529160200191610494565b820191905f5260205f20905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b5f6104a882610984565b506104b282610a0a565b9050919050565b6104cb82826104c6610a43565b610a4a565b5050565b6104db33600654610a5c565b60065f8154809291906104ed90611c4a565b9190505550565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610564575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161055b919061184a565b60405180910390fd5b5f6105778383610572610a43565b610a79565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ed578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105e493929190611c91565b60405180910390fd5b50505050565b61060d83838360405180602001604052805f815250610804565b505050565b5f61061c82610984565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610694575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161068b919061184a565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff166106f982610612565b73ffffffffffffffffffffffffffffffffffffffff161461074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074690611d10565b60405180910390fd5b61075a3383836105f3565b5050565b60606001805461076d90611bed565b80601f016020809104026020016040519081016040528092919081815260200182805461079990611bed565b80156107e45780601f106107bb576101008083540402835291602001916107e4565b820191905f5260205f20905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b6108006107f9610a43565b8383610c84565b5050565b61080f8484846104f4565b61081b84848484610ded565b50505050565b606061082c82610984565b505f610836610f9f565b90505f8151116108545760405180602001604052805f81525061087f565b8061085e84610fb5565b60405160200161086f929190611d68565b6040516020818303038152906040525b915050919050565b60065481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061098f8361107f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a0157826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109f89190611955565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610a5783838360016110b8565b505050565b610a75828260405180602001604052805f815250611277565b5050565b5f80610a848461107f565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ac557610ac4818486611292565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b5057610b045f855f806110b8565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bcf57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf457816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610ceb919061184a565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610de09190611704565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115610f99578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610e30610a43565b8685856040518563ffffffff1660e01b8152600401610e529493929190611ddd565b6020604051808303815f875af1925050508015610e8d57506040513d601f19601f82011682018060405250810190610e8a9190611e3b565b60015b610f0e573d805f8114610ebb576040519150601f19603f3d011682016040523d82523d5f602084013e610ec0565b606091505b505f815103610f0657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610efd919061184a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f9757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f8e919061184a565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60605f6001610fc384611355565b0190505f8167ffffffffffffffff811115610fe157610fe06119de565b5b6040519080825280601f01601f1916602001820160405280156110135781602001600182028036833780820191505090505b5090505f82602001820190505b600115611074578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161106957611068611e66565b5b0494505f8503611020575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110f057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611222575f6110ff84610984565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561116957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561117c575061117a818461088d565b155b156111be57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016111b5919061184a565b60405180910390fd5b811561122057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61128183836114a6565b61128d5f848484610ded565b505050565b61129d838383611599565b611350575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361131157806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016113089190611955565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611347929190611e93565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106113b1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816113a7576113a6611e66565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106113ee576d04ee2d6d415b85acef810000000083816113e4576113e3611e66565b5b0492506020810190505b662386f26fc10000831061141d57662386f26fc10000838161141357611412611e66565b5b0492506010810190505b6305f5e1008310611446576305f5e100838161143c5761143b611e66565b5b0492506008810190505b612710831061146b57612710838161146157611460611e66565b5b0492506004810190505b6064831061148e576064838161148457611483611e66565b5b0492506002810190505b600a831061149d576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611516575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161150d919061184a565b60405180910390fd5b5f61152283835f610a79565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611594575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161158b919061184a565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561165057508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116115750611610848461088d565b5b8061164f57508273ffffffffffffffffffffffffffffffffffffffff1661163783610a0a565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61169e8161166a565b81146116a8575f80fd5b50565b5f813590506116b981611695565b92915050565b5f602082840312156116d4576116d3611662565b5b5f6116e1848285016116ab565b91505092915050565b5f8115159050919050565b6116fe816116ea565b82525050565b5f6020820190506117175f8301846116f5565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61175f8261171d565b6117698185611727565b9350611779818560208601611737565b61178281611745565b840191505092915050565b5f6020820190508181035f8301526117a58184611755565b905092915050565b5f819050919050565b6117bf816117ad565b81146117c9575f80fd5b50565b5f813590506117da816117b6565b92915050565b5f602082840312156117f5576117f4611662565b5b5f611802848285016117cc565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118348261180b565b9050919050565b6118448161182a565b82525050565b5f60208201905061185d5f83018461183b565b92915050565b61186c8161182a565b8114611876575f80fd5b50565b5f8135905061188781611863565b92915050565b5f80604083850312156118a3576118a2611662565b5b5f6118b085828601611879565b92505060206118c1858286016117cc565b9150509250929050565b5f805f606084860312156118e2576118e1611662565b5b5f6118ef86828701611879565b935050602061190086828701611879565b9250506040611911868287016117cc565b9150509250925092565b5f602082840312156119305761192f611662565b5b5f61193d84828501611879565b91505092915050565b61194f816117ad565b82525050565b5f6020820190506119685f830184611946565b92915050565b611977816116ea565b8114611981575f80fd5b50565b5f813590506119928161196e565b92915050565b5f80604083850312156119ae576119ad611662565b5b5f6119bb85828601611879565b92505060206119cc85828601611984565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611a1482611745565b810181811067ffffffffffffffff82111715611a3357611a326119de565b5b80604052505050565b5f611a45611659565b9050611a518282611a0b565b919050565b5f67ffffffffffffffff821115611a7057611a6f6119de565b5b611a7982611745565b9050602081019050919050565b828183375f83830152505050565b5f611aa6611aa184611a56565b611a3c565b905082815260208101848484011115611ac257611ac16119da565b5b611acd848285611a86565b509392505050565b5f82601f830112611ae957611ae86119d6565b5b8135611af9848260208601611a94565b91505092915050565b5f805f8060808587031215611b1a57611b19611662565b5b5f611b2787828801611879565b9450506020611b3887828801611879565b9350506040611b49878288016117cc565b925050606085013567ffffffffffffffff811115611b6a57611b69611666565b5b611b7687828801611ad5565b91505092959194509250565b5f8060408385031215611b9857611b97611662565b5b5f611ba585828601611879565b9250506020611bb685828601611879565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c0457607f821691505b602082108103611c1757611c16611bc0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c54826117ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c8657611c85611c1d565b5b600182019050919050565b5f606082019050611ca45f83018661183b565b611cb16020830185611946565b611cbe604083018461183b565b949350505050565b7f4e6f7420746865206f776e6572000000000000000000000000000000000000005f82015250565b5f611cfa600d83611727565b9150611d0582611cc6565b602082019050919050565b5f6020820190508181035f830152611d2781611cee565b9050919050565b5f81905092915050565b5f611d428261171d565b611d4c8185611d2e565b9350611d5c818560208601611737565b80840191505092915050565b5f611d738285611d38565b9150611d7f8284611d38565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611daf82611d8b565b611db98185611d95565b9350611dc9818560208601611737565b611dd281611745565b840191505092915050565b5f608082019050611df05f83018761183b565b611dfd602083018661183b565b611e0a6040830185611946565b8181036060830152611e1c8184611da5565b905095945050505050565b5f81519050611e3581611695565b92915050565b5f60208284031215611e5057611e4f611662565b5b5f611e5d84828501611e27565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611ea65f83018561183b565b611eb36020830184611946565b939250505056fea2646970667358221220b896f3c294ee9f243ceb6a868540fe95ab83a6d92d76574329c28844e9b760a364736f6c634300081a0033