610160604052348015610010575f80fd5b50604051615371380380615371833981810160405281019061003291906104ad565b6040518060400160405280600581526020017f4c414d50310000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250826040518060400160405280600581526020017f4c414d50310000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c4d503100000000000000000000000000000000000000000000000000000000815250815f90816101199190610712565b5080600190816101299190610712565b5050505f600a5f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101b5575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101ac91906107f0565b60405180910390fd5b6101c48161027560201b60201c565b506101d9600b8361033a60201b90919060201c565b61012081815250506101f5600c8261033a60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061023261038760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505061099a565b5f600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60208351101561035b57610354836103e160201b60201c565b9050610381565b8261036b8361044660201b60201c565b5f0190816103799190610712565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016103c6959493929190610830565b60405160208183030381529060405280519060200120905090565b5f80829050601f8151111561042d57826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040161042491906108e7565b60405180910390fd5b80518161043990610934565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61047c82610453565b9050919050565b61048c81610472565b8114610496575f80fd5b50565b5f815190506104a781610483565b92915050565b5f602082840312156104c2576104c161044f565b5b5f6104cf84828501610499565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061055357607f821691505b6020821081036105665761056561050f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105c87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261058d565b6105d2868361058d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61061661061161060c846105ea565b6105f3565b6105ea565b9050919050565b5f819050919050565b61062f836105fc565b61064361063b8261061d565b848454610599565b825550505050565b5f90565b61065761064b565b610662818484610626565b505050565b5b818110156106855761067a5f8261064f565b600181019050610668565b5050565b601f8211156106ca5761069b8161056c565b6106a48461057e565b810160208510156106b3578190505b6106c76106bf8561057e565b830182610667565b50505b505050565b5f82821c905092915050565b5f6106ea5f19846008026106cf565b1980831691505092915050565b5f61070283836106db565b9150826002028217905092915050565b61071b826104d8565b67ffffffffffffffff811115610734576107336104e2565b5b61073e825461053c565b610749828285610689565b5f60209050601f83116001811461077a575f8415610768578287015190505b61077285826106f7565b8655506107d9565b601f1984166107888661056c565b5f5b828110156107af5784890151825560018201915060208501945060208101905061078a565b868310156107cc57848901516107c8601f8916826106db565b8355505b6001600288020188555050505b505050505050565b6107ea81610472565b82525050565b5f6020820190506108035f8301846107e1565b92915050565b5f819050919050565b61081b81610809565b82525050565b61082a816105ea565b82525050565b5f60a0820190506108435f830188610812565b6108506020830187610812565b61085d6040830186610812565b61086a6060830185610821565b61087760808301846107e1565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6108b9826104d8565b6108c38185610881565b93506108d3818560208601610891565b6108dc8161089f565b840191505092915050565b5f6020820190508181035f8301526108ff81846108af565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f61092b8251610809565b80915050919050565b5f61093e82610907565b8261094884610911565b905061095381610920565b925060208210156109935761098e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261058d565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516149866109eb5f395f61181f01525f6117e401525f612f6401525f612f4301525f6125b201525f61260801525f61263101526149865ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c806370a082311161011857806395d89b41116100ab578063b88d4fde1161007a578063b88d4fde146105f0578063c3cda5201461060c578063c87b56dd14610628578063e985e9c514610658578063f2fde38b1461068857610204565b806395d89b411461056a5780639ab24eb014610588578063a1448194146105b8578063a22cb465146105d457610204565b806384b0196e116100e757806384b0196e146104da5780638da5cb5b146104fe5780638e539e8c1461051c57806391ddadf41461054c57610204565b806370a0823114610466578063715018a6146104965780637ecebe00146104a05780638456cb59146104d057610204565b80633f4ba83a1161019b5780634f6ccce71161016a5780634f6ccce71461039c578063587cde1e146103cc5780635c19a95c146103fc5780635c975abb146104185780636352211e1461043657610204565b80633f4ba83a1461033c57806342842e0e1461034657806342966c68146103625780634bf5d7e91461037e57610204565b806318160ddd116101d757806318160ddd146102a257806323b872dd146102c05780632f745c59146102dc5780633a46b1a81461030c57610204565b806301ffc9a71461020857806306fdde0314610238578063081812fc14610256578063095ea7b314610286575b5f80fd5b610222600480360381019061021d9190613b65565b6106a4565b60405161022f9190613baa565b60405180910390f35b6102406106b5565b60405161024d9190613c33565b60405180910390f35b610270600480360381019061026b9190613c86565b610744565b60405161027d9190613cf0565b60405180910390f35b6102a0600480360381019061029b9190613d33565b61075f565b005b6102aa610775565b6040516102b79190613d80565b60405180910390f35b6102da60048036038101906102d59190613d99565b610781565b005b6102f660048036038101906102f19190613d33565b610880565b6040516103039190613d80565b60405180910390f35b61032660048036038101906103219190613d33565b610924565b6040516103339190613d80565b60405180910390f35b6103446109fa565b005b610360600480360381019061035b9190613d99565b610a0c565b005b61037c60048036038101906103779190613c86565b610a2b565b005b610386610a41565b6040516103939190613c33565b60405180910390f35b6103b660048036038101906103b19190613c86565b610ad5565b6040516103c39190613d80565b60405180910390f35b6103e660048036038101906103e19190613de9565b610b47565b6040516103f39190613cf0565b60405180910390f35b61041660048036038101906104119190613de9565b610bac565b005b610420610bc5565b60405161042d9190613baa565b60405180910390f35b610450600480360381019061044b9190613c86565b610bda565b60405161045d9190613cf0565b60405180910390f35b610480600480360381019061047b9190613de9565b610beb565b60405161048d9190613d80565b60405180910390f35b61049e610ca1565b005b6104ba60048036038101906104b59190613de9565b610cb4565b6040516104c79190613d80565b60405180910390f35b6104d8610cfa565b005b6104e2610d0c565b6040516104f59796959493929190613f1d565b60405180910390f35b610506610db1565b6040516105139190613cf0565b60405180910390f35b61053660048036038101906105319190613c86565b610dda565b6040516105439190613d80565b60405180910390f35b610554610e74565b6040516105619190613fbf565b60405180910390f35b610572610e82565b60405161057f9190613c33565b60405180910390f35b6105a2600480360381019061059d9190613de9565b610f12565b6040516105af9190613d80565b60405180910390f35b6105d260048036038101906105cd9190613d33565b610f7b565b005b6105ee60048036038101906105e99190614002565b610f91565b005b61060a6004803603810190610605919061416c565b610fa7565b005b6106266004803603810190610621919061424c565b610fc4565b005b610642600480360381019061063d9190613c86565b611089565b60405161064f9190613c33565b60405180910390f35b610672600480360381019061066d91906142d5565b6110ef565b60405161067f9190613baa565b60405180910390f35b6106a2600480360381019061069d9190613de9565b61117d565b005b5f6106ae82611201565b9050919050565b60605f80546106c390614340565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90614340565b801561073a5780601f106107115761010080835404028352916020019161073a565b820191905f5260205f20905b81548152906001019060200180831161071d57829003601f168201915b5050505050905090565b5f61074e8261127a565b5061075882611300565b9050919050565b610771828261076c611339565b611340565b5050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107f1575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107e89190613cf0565b60405180910390fd5b5f61080483836107ff611339565b611352565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461087a578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161087193929190614370565b60405180910390fd5b50505050565b5f61088a83610beb565b82106108cf5782826040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016108c69291906143a5565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b5f8061092e610e74565b90508065ffffffffffff16831061097e5782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016109759291906143cc565b60405180910390fd5b6109d561098a84611367565b600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206113c090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b610a026114ad565b610a0a611534565b565b610a2683838360405180602001604052805f815250610fa7565b505050565b610a3d5f82610a38611339565b611352565b5050565b6060610a4b611595565b65ffffffffffff16610a5b610e74565b65ffffffffffff1614610a9a576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b5f610ade610775565b8210610b23575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610b1a9291906143a5565b60405180910390fd5b60088281548110610b3757610b366143f3565b5b905f5260205f2001549050919050565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610bb5611339565b9050610bc181836115a4565b5050565b5f600a5f9054906101000a900460ff16905090565b5f610be48261127a565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c5c575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610c539190613cf0565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ca96114ad565b610cb25f6116b4565b565b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d026114ad565b610d0a611779565b565b5f6060805f805f6060610d1d6117db565b610d25611816565b46305f801b5f67ffffffffffffffff811115610d4457610d43614048565b5b604051908082528060200260200182016040528015610d725781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610de4610e74565b90508065ffffffffffff168310610e345782816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610e2b9291906143cc565b60405180910390fd5b610e50610e4084611367565b60106113c090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610e7d611595565b905090565b606060018054610e9190614340565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebd90614340565b8015610f085780601f10610edf57610100808354040283529160200191610f08565b820191905f5260205f20905b815481529060010190602001808311610eeb57829003601f168201915b5050505050905090565b5f610f58600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611851565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b610f836114ad565b610f8d82826118b3565b5050565b610fa3610f9c611339565b83836118d0565b5050565b610fb2848484610781565b610fbe84848484611a39565b50505050565b8342111561100957836040517f4683af0e0000000000000000000000000000000000000000000000000000000081526004016110009190613d80565b60405180910390fd5b5f61106a6110627fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016110479493929190614420565b60405160208183030381529060405280519060200120611beb565b858585611c04565b90506110768187611c32565b61108081886115a4565b50505050505050565b60606110948261127a565b505f61109e611c89565b90505f8151116110bc5760405180602001604052805f8152506110e7565b806110c684611c9f565b6040516020016110d792919061449d565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6111856114ad565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f5575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016111ec9190613cf0565b60405180910390fd5b6111fe816116b4565b50565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611273575061127282611d69565b5b9050919050565b5f8061128583611e4a565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112f757826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112ee9190613d80565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b61134d8383836001611e83565b505050565b5f61135e848484612042565b90509392505050565b5f65ffffffffffff80168211156113b8576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016113af929190614502565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115611441575f6113e384612068565b846113ee9190614556565b90506113fc875f018261215e565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561142f5780915061143f565b60018161143c9190614589565b92505b505b5f611450875f01878585612170565b90505f811461149f57611471875f0160018361146c9190614556565b61215e565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166114a1565b5f5b94505050505092915050565b6114b5611339565b73ffffffffffffffffffffffffffffffffffffffff166114d3610db1565b73ffffffffffffffffffffffffffffffffffffffff1614611532576114f6611339565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115299190613cf0565b60405180910390fd5b565b61153c6121e5565b5f600a5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61157e611339565b60405161158b9190613cf0565b60405180910390a1565b5f61159f43611367565b905090565b5f6115ae83610b47565b905081600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46116af81836116aa86612225565b612236565b505050565b5f600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117816124a6565b6001600a5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117c4611339565b6040516117d19190613cf0565b60405180910390a1565b6060611811600b7f00000000000000000000000000000000000000000000000000000000000000006124e790919063ffffffff16565b905090565b606061184c600c7f00000000000000000000000000000000000000000000000000000000000000006124e790919063ffffffff16565b905090565b5f80825f018054905090505f81146118a95761187b835f016001836118769190614556565b61215e565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166118ab565b5f5b915050919050565b6118cc828260405180602001604052805f815250612594565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361194057816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016119379190613cf0565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a2c9190613baa565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611be5578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a7c611339565b8685856040518563ffffffff1660e01b8152600401611a9e949392919061460e565b6020604051808303815f875af1925050508015611ad957506040513d601f19601f82011682018060405250810190611ad6919061466c565b60015b611b5a573d805f8114611b07576040519150601f19603f3d011682016040523d82523d5f602084013e611b0c565b606091505b505f815103611b5257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611b499190613cf0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611be357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611bda9190613cf0565b60405180910390fd5b505b50505050565b5f611bfd611bf76125af565b83612665565b9050919050565b5f805f80611c14888888886126a5565b925092509250611c24828261278c565b829350505050949350505050565b5f611c3c836128ee565b9050808214611c845782816040517f752d88c0000000000000000000000000000000000000000000000000000000008152600401611c7b9291906143a5565b60405180910390fd5b505050565b606060405180602001604052805f815250905090565b60605f6001611cad84612941565b0190505f8167ffffffffffffffff811115611ccb57611cca614048565b5b6040519080825280601f01601f191660200182016040528015611cfd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611d5e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611d5357611d52614697565b5b0494505f8503611d0a575b819350505050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e3357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e435750611e4282612a92565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611ebb57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fed575f611eca8461127a565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f3457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611f475750611f4581846110ef565b155b15611f8957826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611f809190613cf0565b60405180910390fd5b8115611feb57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f8061204f858585612afb565b905061205d81866001612b18565b809150509392505050565b5f808203612078575f9050612159565b5f600161208484612bd0565b901c6001901b9050600181848161209e5761209d614697565b5b048201901c905060018184816120b7576120b6614697565b5b048201901c905060018184816120d0576120cf614697565b5b048201901c905060018184816120e9576120e8614697565b5b048201901c9050600181848161210257612101614697565b5b048201901c9050600181848161211b5761211a614697565b5b048201901c9050600181848161213457612133614697565b5b048201901c90506121558182858161214f5761214e614697565b5b04612ca7565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b818310156121da575f6121858484612cbf565b90508465ffffffffffff1661219a878361215e565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff1611156121c4578092506121d4565b6001816121d19190614589565b93505b50612172565b819050949350505050565b6121ed610bc5565b612223576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f61222f82610beb565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561227157505f81115b156124a1575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461238b575f806122fc600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20612ce46122f786612cf9565b612d66565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516123809291906146c4565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124a0575f80612411600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20612da561240c86612cf9565b612d66565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516124959291906146c4565b60405180910390a250505b5b505050565b6124ae610bc5565b156124e5576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b606060ff5f1b8314612503576124fc83612dba565b905061258e565b81805461250f90614340565b80601f016020809104026020016040519081016040528092919081815260200182805461253b90614340565b80156125865780601f1061255d57610100808354040283529160200191612586565b820191905f5260205f20905b81548152906001019060200180831161256957829003601f168201915b505050505090505b92915050565b61259e8383612e2c565b6125aa5f848484611a39565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561262a57507f000000000000000000000000000000000000000000000000000000000000000046145b15612657577f00000000000000000000000000000000000000000000000000000000000000009050612662565b61265f612f1f565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156126e1575f600385925092509250612782565b5f6001888888886040515f815260200160405260405161270494939291906146fa565b6020604051602081039080840390855afa158015612724573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612775575f60015f801b93509350935050612782565b805f805f1b935093509350505b9450945094915050565b5f600381111561279f5761279e61473d565b5b8260038111156127b2576127b161473d565b5b03156128ea57600160038111156127cc576127cb61473d565b5b8260038111156127df576127de61473d565b5b03612816576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561282a5761282961473d565b5b82600381111561283d5761283c61473d565b5b0361288157805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016128789190613d80565b60405180910390fd5b6003808111156128945761289361473d565b5b8260038111156128a7576128a661473d565b5b036128e957806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016128e0919061476a565b60405180910390fd5b5b5050565b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061299d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161299357612992614697565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129da576d04ee2d6d415b85acef810000000083816129d0576129cf614697565b5b0492506020810190505b662386f26fc100008310612a0957662386f26fc1000083816129ff576129fe614697565b5b0492506010810190505b6305f5e1008310612a32576305f5e1008381612a2857612a27614697565b5b0492506008810190505b6127108310612a57576127108381612a4d57612a4c614697565b5b0492506004810190505b60648310612a7a5760648381612a7057612a6f614697565b5b0492506002810190505b600a8310612a89576001810190505b80915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f612b046124a6565b612b0f848484612fb4565b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b6457612b616010612da5612b5c84612cf9565b612d66565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bb057612bad6010612ce4612ba884612cf9565b612d66565b50505b612bcb612bbc84610b47565b612bc584610b47565b83612236565b505050565b5f805f90505f608084901c1115612bef57608083901c92506080810190505b5f604084901c1115612c0957604083901c92506040810190505b5f602084901c1115612c2357602083901c92506020810190505b5f601084901c1115612c3d57601083901c92506010810190505b5f600884901c1115612c5757600883901c92506008810190505b5f600484901c1115612c7157600483901c92506004810190505b5f600284901c1115612c8b57600283901c92506002810190505b5f600184901c1115612c9e576001810190505b80915050919050565b5f818310612cb55781612cb7565b825b905092915050565b5f6002828418612ccf9190614783565b828416612cdc9190614589565b905092915050565b5f8183612cf191906147d8565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115612d5e5760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401612d5592919061485e565b60405180910390fd5b819050919050565b5f80612d99612d73610e74565b612d89612d7f88611851565b868863ffffffff16565b876130ce9092919063ffffffff16565b91509150935093915050565b5f8183612db29190614885565b905092915050565b60605f612dc6836130e9565b90505f602067ffffffffffffffff811115612de457612de3614048565b5b6040519080825280601f01601f191660200182016040528015612e165781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e9c575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612e939190613cf0565b60405180910390fd5b5f612ea883835f611352565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612f1a575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401612f119190613cf0565b60405180910390fd5b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001612f999594939291906148d2565b60405160208183030381529060405280519060200120905090565b5f80612fc1858585613137565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361300457612fff84613342565b613043565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613042576130418185613386565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036130845761307f846134d0565b6130c3565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130c2576130c18585613590565b5b5b809150509392505050565b5f806130dd855f018585613614565b91509150935093915050565b5f8060ff835f1c169050601f81111561312e576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f8061314284611e4a565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131835761318281848661397c565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461320e576131c25f855f80611e83565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461328d57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f61339083610beb565b90505f60075f8481526020019081526020015f20549050818114613467575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506134e39190614556565b90505f60095f8481526020019081526020015f205490505f6008838154811061350f5761350e6143f3565b5b905f5260205f2001549050806008838154811061352f5761352e6143f3565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061357757613576614923565b5b600190038181905f5260205f20015f9055905550505050565b5f600161359c84610beb565b6135a69190614556565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f805f858054905090505f811115613894575f61363d876001846136389190614556565b61215e565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115613728576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff16036137aa5784613759886001856137549190614556565b61215e565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613883565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050613974565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b613987838383613a3f565b613a3a575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139fb57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016139f29190613d80565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613a319291906143a5565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613af657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613ab75750613ab684846110ef565b5b80613af557508273ffffffffffffffffffffffffffffffffffffffff16613add83611300565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b4481613b10565b8114613b4e575f80fd5b50565b5f81359050613b5f81613b3b565b92915050565b5f60208284031215613b7a57613b79613b08565b5b5f613b8784828501613b51565b91505092915050565b5f8115159050919050565b613ba481613b90565b82525050565b5f602082019050613bbd5f830184613b9b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c0582613bc3565b613c0f8185613bcd565b9350613c1f818560208601613bdd565b613c2881613beb565b840191505092915050565b5f6020820190508181035f830152613c4b8184613bfb565b905092915050565b5f819050919050565b613c6581613c53565b8114613c6f575f80fd5b50565b5f81359050613c8081613c5c565b92915050565b5f60208284031215613c9b57613c9a613b08565b5b5f613ca884828501613c72565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613cda82613cb1565b9050919050565b613cea81613cd0565b82525050565b5f602082019050613d035f830184613ce1565b92915050565b613d1281613cd0565b8114613d1c575f80fd5b50565b5f81359050613d2d81613d09565b92915050565b5f8060408385031215613d4957613d48613b08565b5b5f613d5685828601613d1f565b9250506020613d6785828601613c72565b9150509250929050565b613d7a81613c53565b82525050565b5f602082019050613d935f830184613d71565b92915050565b5f805f60608486031215613db057613daf613b08565b5b5f613dbd86828701613d1f565b9350506020613dce86828701613d1f565b9250506040613ddf86828701613c72565b9150509250925092565b5f60208284031215613dfe57613dfd613b08565b5b5f613e0b84828501613d1f565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613e4881613e14565b82525050565b5f819050919050565b613e6081613e4e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e9881613c53565b82525050565b5f613ea98383613e8f565b60208301905092915050565b5f602082019050919050565b5f613ecb82613e66565b613ed58185613e70565b9350613ee083613e80565b805f5b83811015613f10578151613ef78882613e9e565b9750613f0283613eb5565b925050600181019050613ee3565b5085935050505092915050565b5f60e082019050613f305f83018a613e3f565b8181036020830152613f428189613bfb565b90508181036040830152613f568188613bfb565b9050613f656060830187613d71565b613f726080830186613ce1565b613f7f60a0830185613e57565b81810360c0830152613f918184613ec1565b905098975050505050505050565b5f65ffffffffffff82169050919050565b613fb981613f9f565b82525050565b5f602082019050613fd25f830184613fb0565b92915050565b613fe181613b90565b8114613feb575f80fd5b50565b5f81359050613ffc81613fd8565b92915050565b5f806040838503121561401857614017613b08565b5b5f61402585828601613d1f565b925050602061403685828601613fee565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61407e82613beb565b810181811067ffffffffffffffff8211171561409d5761409c614048565b5b80604052505050565b5f6140af613aff565b90506140bb8282614075565b919050565b5f67ffffffffffffffff8211156140da576140d9614048565b5b6140e382613beb565b9050602081019050919050565b828183375f83830152505050565b5f61411061410b846140c0565b6140a6565b90508281526020810184848401111561412c5761412b614044565b5b6141378482856140f0565b509392505050565b5f82601f83011261415357614152614040565b5b81356141638482602086016140fe565b91505092915050565b5f805f806080858703121561418457614183613b08565b5b5f61419187828801613d1f565b94505060206141a287828801613d1f565b93505060406141b387828801613c72565b925050606085013567ffffffffffffffff8111156141d4576141d3613b0c565b5b6141e08782880161413f565b91505092959194509250565b5f60ff82169050919050565b614201816141ec565b811461420b575f80fd5b50565b5f8135905061421c816141f8565b92915050565b61422b81613e4e565b8114614235575f80fd5b50565b5f8135905061424681614222565b92915050565b5f805f805f8060c0878903121561426657614265613b08565b5b5f61427389828a01613d1f565b965050602061428489828a01613c72565b955050604061429589828a01613c72565b94505060606142a689828a0161420e565b93505060806142b789828a01614238565b92505060a06142c889828a01614238565b9150509295509295509295565b5f80604083850312156142eb576142ea613b08565b5b5f6142f885828601613d1f565b925050602061430985828601613d1f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061435757607f821691505b60208210810361436a57614369614313565b5b50919050565b5f6060820190506143835f830186613ce1565b6143906020830185613d71565b61439d6040830184613ce1565b949350505050565b5f6040820190506143b85f830185613ce1565b6143c56020830184613d71565b9392505050565b5f6040820190506143df5f830185613d71565b6143ec6020830184613fb0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6080820190506144335f830187613e57565b6144406020830186613ce1565b61444d6040830185613d71565b61445a6060830184613d71565b95945050505050565b5f81905092915050565b5f61447782613bc3565b6144818185614463565b9350614491818560208601613bdd565b80840191505092915050565b5f6144a8828561446d565b91506144b4828461446d565b91508190509392505050565b5f819050919050565b5f819050919050565b5f6144ec6144e76144e2846144c0565b6144c9565b6141ec565b9050919050565b6144fc816144d2565b82525050565b5f6040820190506145155f8301856144f3565b6145226020830184613d71565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61456082613c53565b915061456b83613c53565b925082820390508181111561458357614582614529565b5b92915050565b5f61459382613c53565b915061459e83613c53565b92508282019050808211156145b6576145b5614529565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f6145e0826145bc565b6145ea81856145c6565b93506145fa818560208601613bdd565b61460381613beb565b840191505092915050565b5f6080820190506146215f830187613ce1565b61462e6020830186613ce1565b61463b6040830185613d71565b818103606083015261464d81846145d6565b905095945050505050565b5f8151905061466681613b3b565b92915050565b5f6020828403121561468157614680613b08565b5b5f61468e84828501614658565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6040820190506146d75f830185613d71565b6146e46020830184613d71565b9392505050565b6146f4816141ec565b82525050565b5f60808201905061470d5f830187613e57565b61471a60208301866146eb565b6147276040830185613e57565b6147346060830184613e57565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208201905061477d5f830184613e57565b92915050565b5f61478d82613c53565b915061479883613c53565b9250826147a8576147a7614697565b5b828204905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6147e2826147b3565b91506147ed836147b3565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561481f5761481e614529565b5b92915050565b5f819050919050565b5f61484861484361483e84614825565b6144c9565b6141ec565b9050919050565b6148588161482e565b82525050565b5f6040820190506148715f83018561484f565b61487e6020830184613d71565b9392505050565b5f61488f826147b3565b915061489a836147b3565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156148cc576148cb614529565b5b92915050565b5f60a0820190506148e55f830188613e57565b6148f26020830187613e57565b6148ff6040830186613e57565b61490c6060830185613d71565b6149196080830184613ce1565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220469a6ce129e82d43544d796e54ebc58f812053474e0af2fcd1ece468853af56664736f6c63430008190033000000000000000000000000160bcedf12b4ee894a8f0fae0156e99f533ad534