60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b5061005261005760201b60201c565b6101c1565b600061006761015b60201b60201c565b90508060000160089054906101000a900460ff16156100b2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80168160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101585767ffffffffffffffff8160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161014f91906101a6565b60405180910390a15b50565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b600067ffffffffffffffff82169050919050565b6101a081610183565b82525050565b60006020820190506101bb6000830184610197565b92915050565b6080516153976101ea60003960008181611c5e01528181611cb30152611e6e01526153976000f3fe6080604052600436106102045760003560e01c806370a08231116101185780639ab24eb0116100a0578063c4d66de81161006f578063c4d66de81461079e578063d505accf146107c7578063dd62ed3e146107f0578063f1127ed81461082d578063f2fde38b1461086a57610204565b80639ab24eb0146106d0578063a9059cbb1461070d578063ad3cb1cc1461074a578063c3cda5201461077557610204565b806384b0196e116100e757806384b0196e146105e15780638da5cb5b146106125780638e539e8c1461063d57806391ddadf41461067a57806395d89b41146106a557610204565b806370a0823114610527578063715018a61461056457806379cc67901461057b5780637ecebe00146105a457610204565b806340c10f191161019b5780634f1ef2861161016a5780634f1ef2861461043d57806352d1902d14610459578063587cde1e146104845780635c19a95c146104c15780636fcfff45146104ea57610204565b806340c10f1914610395578063428c2e13146103be57806342966c68146103e95780634bf5d7e91461041257610204565b806323b872dd116101d757806323b872dd146102c5578063313ce567146103025780633644e5151461032d5780633a46b1a81461035857610204565b806306fdde0314610209578063095ea7b3146102345780630de65a441461027157806318160ddd1461029a575b600080fd5b34801561021557600080fd5b5061021e610893565b60405161022b9190613f90565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061405a565b610934565b60405161026891906140b5565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190614205565b610957565b005b3480156102a657600080fd5b506102af610972565b6040516102bc919061425d565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190614278565b61098a565b6040516102f991906140b5565b60405180910390f35b34801561030e57600080fd5b506103176109b9565b60405161032491906142e7565b60405180910390f35b34801561033957600080fd5b506103426109c2565b60405161034f919061431b565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061405a565b6109d1565b60405161038c919061425d565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061405a565b610ab9565b005b3480156103ca57600080fd5b506103d3610b30565b6040516103e09190613f90565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190614336565b610bc2565b005b34801561041e57600080fd5b50610427610bd6565b6040516104349190613f90565b60405180910390f35b61045760048036038101906104529190614404565b610c6a565b005b34801561046557600080fd5b5061046e610c89565b60405161047b919061431b565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190614460565b610cbc565b6040516104b8919061449c565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190614460565b610d33565b005b3480156104f657600080fd5b50610511600480360381019061050c9190614460565b610d4d565b60405161051e91906144d6565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614460565b610d5f565b60405161055b919061425d565b60405180910390f35b34801561057057600080fd5b50610579610db6565b005b34801561058757600080fd5b506105a2600480360381019061059d919061405a565b610dca565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190614460565b610dea565b6040516105d8919061425d565b60405180910390f35b3480156105ed57600080fd5b506105f6610dfc565b60405161060997969594939291906145ea565b60405180910390f35b34801561061e57600080fd5b50610627610f0e565b604051610634919061449c565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190614336565b610f46565b604051610671919061425d565b60405180910390f35b34801561068657600080fd5b5061068f610ff0565b60405161069c919061468f565b60405180910390f35b3480156106b157600080fd5b506106ba610fff565b6040516106c79190613f90565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190614460565b6110a0565b604051610704919061425d565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061405a565b61111a565b60405161074191906140b5565b60405180910390f35b34801561075657600080fd5b5061075f61113d565b60405161076c9190613f90565b60405180910390f35b34801561078157600080fd5b5061079c60048036038101906107979190614702565b611176565b005b3480156107aa57600080fd5b506107c560048036038101906107c09190614460565b61123c565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061478f565b6114ef565b005b3480156107fc57600080fd5b5061081760048036038101906108129190614831565b611637565b604051610824919061425d565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061489d565b6116cc565b6040516108619190614950565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190614460565b6116e6565b005b6060600061089f61176c565b90508060030180546108b09061499a565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc9061499a565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505091505090565b60008061093f611794565b905061094c81858561179c565b600191505092915050565b61095f6117ae565b806000908161096e9190614b77565b5050565b60008061097d61176c565b9050806002015491505090565b600080610995611794565b90506109a2858285611835565b6109ad8585856118c9565b60019150509392505050565b60006012905090565b60006109cc6119bd565b905090565b6000806109dc6119cc565b905060006109e8610ff0565b90508065ffffffffffff168410610a385783816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610a2f929190614c49565b60405180910390fd5b610a93610a44856119f4565b8360010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a4e90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b610ac16117ae565b6b033b2e3c9fd0803ce800000081610ad7610972565b610ae19190614ca1565b1115610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990614d21565b60405180910390fd5b610b2c8282611b48565b5050565b606060008054610b3f9061499a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b9061499a565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b610bd3610bcd611794565b82611bca565b50565b6060610be0611c4c565b65ffffffffffff16610bf0610ff0565b65ffffffffffff1614610c2f576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b610c72611c5c565b610c7b82611d42565b610c858282611d4d565b5050565b6000610c93611e6c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b600080610cc76119cc565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000610d3d611794565b9050610d498183611ef3565b5050565b6000610d5882612016565b9050919050565b600080610d6a61176c565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b610dbe6117ae565b610dc8600061207c565b565b610ddc82610dd6611794565b83611835565b610de68282611bca565b5050565b6000610df582612153565b9050919050565b6000606080600080600060606000610e12612165565b90506000801b8160000154148015610e3057506000801b8160010154145b610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690614d8d565b60405180910390fd5b610e7761218d565b610e7f61222e565b46306000801b600067ffffffffffffffff811115610ea057610e9f6140da565b5b604051908082528060200260200182016040528015610ece5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b600080610f196122cf565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b600080610f516119cc565b90506000610f5d610ff0565b90508065ffffffffffff168410610fad5783816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610fa4929190614c49565b60405180910390fd5b610fcb610fb9856119f4565b83600201611a4e90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1692505050919050565b6000610ffa611c4c565b905090565b6060600061100b61176c565b905080600401805461101c9061499a565b80601f01602080910402602001604051908101604052809291908181526020018280546110489061499a565b80156110955780601f1061106a57610100808354040283529160200191611095565b820191906000526020600020905b81548152906001019060200180831161107857829003601f168201915b505050505091505090565b6000806110ab6119cc565b90506110f68160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206122f7565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600080611125611794565b90506111328185856118c9565b600191505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b834211156111bb57836040517f4683af0e0000000000000000000000000000000000000000000000000000000081526004016111b2919061425d565b60405180910390fd5b600061121d6112157fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016111fa9493929190614dad565b6040516020818303038152906040528051906020012061235f565b858585612379565b905061122981876123a9565b6112338188611ef3565b50505050505050565b6000611246612401565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156112945750825b9050600060018367ffffffffffffffff161480156112c9575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156112d7575080155b1561130e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550831561135e5760018560000160086101000a81548160ff0219169083151502179055505b6113d26040518060400160405280600d81526020017f417263616469612047616d6573000000000000000000000000000000000000008152506040518060400160405280600481526020017f4152434100000000000000000000000000000000000000000000000000000000815250612429565b6113da61243f565b6114186040518060400160405280600d81526020017f417263616469612047616d657300000000000000000000000000000000000000815250612449565b611420612493565b6114298661249d565b6114316124b1565b6040518060400160405280601c81526020017f68747470733a2f2f646f63732e6172636164696167616d65732e696f00000000815250600090816114759190614b77565b5061148b866aa56fa5b99019a5c8000000611b48565b83156114e75760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516114de9190614e41565b60405180910390a15b505050505050565b8342111561153457836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161152b919061425d565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886115638c6124bb565b8960405160200161157996959493929190614e5c565b604051602081830303815290604052805190602001209050600061159c8261235f565b905060006115ac82878787612379565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461162057808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401611617929190614ebd565b60405180910390fd5b61162b8a8a8a61179c565b50505050505050505050565b60008061164261176c565b90508060010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505092915050565b6116d4613ec2565b6116de8383612520565b905092915050565b6116ee6117ae565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117605760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611757919061449c565b60405180910390fd5b6117698161207c565b50565b60007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b600033905090565b6117a98383836001612590565b505050565b6117b6611794565b73ffffffffffffffffffffffffffffffffffffffff166117d4610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614611833576117f7611794565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161182a919061449c565b60405180910390fd5b565b60006118418484611637565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118c357818110156118b3578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016118aa93929190614ee6565b60405180910390fd5b6118c284848484036000612590565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361193b5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611932919061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119ad5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016119a4919061449c565b60405180910390fd5b6119b8838383612776565b505050565b60006119c7612786565b905090565b60007fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d00905090565b600065ffffffffffff8016821115611a46576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611a3d929190614f58565b60405180910390fd5b819050919050565b600080836000018054905090506000808290506005831115611ad6576000611a75846127ea565b84611a809190614f81565b9050611a8f8760000182612987565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161015611ac457809150611ad4565b600181611ad19190614ca1565b92505b505b6000611ae78760000187858561299c565b905060008114611b3957611b0a87600001600183611b059190614f81565b612987565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611b3c565b60005b94505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bba5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bb1919061449c565b60405180910390fd5b611bc660008383612776565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c3c5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c33919061449c565b60405180910390fd5b611c4882600083612776565b5050565b6000611c57436119f4565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d0957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611cf0612a15565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d40576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611d4a6117ae565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611db557506040513d601f19601f82011682018060405250810190611db29190614fca565b60015b611df657816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611ded919061449c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611e5d57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611e54919061431b565b60405180910390fd5b611e678383612a6c565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000611efd6119cc565b90506000611f0a84610cbc565b9050828260000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612010818461200b87612adf565b612af1565b50505050565b6000806120216119cc565b905061207461206f8260010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612d7b565b612d8c565b915050919050565b60006120866122cf565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b600061215e82612de4565b9050919050565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60606000612199612165565b90508060020180546121aa9061499a565b80601f01602080910402602001604051908101604052809291908181526020018280546121d69061499a565b80156122235780601f106121f857610100808354040283529160200191612223565b820191906000526020600020905b81548152906001019060200180831161220657829003601f168201915b505050505091505090565b6060600061223a612165565b905080600301805461224b9061499a565b80601f01602080910402602001604051908101604052809291908181526020018280546122779061499a565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b505050505091505090565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b600080826000018054905090506000811461235457612325836000016001836123209190614f81565b612987565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612357565b60005b915050919050565b600061237261236c6119bd565b83612e3b565b9050919050565b60008060008061238b88888888612e7c565b92509250925061239b8282612f70565b829350505050949350505050565b60006123b4836124bb565b90508082146123fc5782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016123f3929190614ff7565b60405180910390fd5b505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6124316130d4565b61243b8282613114565b5050565b6124476130d4565b565b6124516130d4565b612490816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250613151565b50565b61249b6130d4565b565b6124a56130d4565b6124ae816131a6565b50565b6124b96130d4565b565b6000806124c661322c565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055915050919050565b612528613ec2565b60006125326119cc565b9050612587838260010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061325490919063ffffffff16565b91505092915050565b600061259a61176c565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361260e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401612605919061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126805760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612677919061449c565b60405180910390fd5b828160010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550811561276f578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612766919061425d565b60405180910390a35b5050505050565b612781838383613329565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6127b16133da565b6127b9613456565b46306040516020016127cf959493929190615020565b60405160208183030381529060405280519060200120905090565b6000600182116127fc57819050612982565b6000829050600060019050700100000000000000000000000000000000821061282e57608082901c9150604081901b90505b68010000000000000000821061284d57604082901c9150602081901b90505b640100000000821061286857602082901c9150601081901b90505b62010000821061288157601082901c9150600881901b90505b610100821061289957600882901c9150600481901b90505b601082106128b057600482901c9150600281901b90505b600482106128c057600181901b90505b600181600302901c905060018185816128dc576128db615073565b5b048201901c905060018185816128f5576128f4615073565b5b048201901c9050600181858161290e5761290d615073565b5b048201901c9050600181858161292757612926615073565b5b048201901c905060018185816129405761293f615073565b5b048201901c9050600181858161295957612958615073565b5b048201901c905061297b81858161297357612972615073565b5b0482116134d2565b8103925050505b919050565b60008260005281602060002001905092915050565b60005b81831015612a0a5760006129b384846134de565b90508465ffffffffffff166129c88783612987565b60000160009054906101000a900465ffffffffffff1665ffffffffffff1611156129f457809250612a04565b600181612a019190614ca1565b93505b5061299f565b819050949350505050565b6000612a437f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613504565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612a758261350e565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2600081511115612ad257612acc82826135db565b50612adb565b612ada61365f565b5b5050565b6000612aea82610d5f565b9050919050565b6000612afb6119cc565b90508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612b395750600082115b15612d7557600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c5957600080612bca8360010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061369c612bc5876136b2565b613720565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508573ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612c4e9291906150a2565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d7457600080612ce58360010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613760612ce0876136b2565b613720565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612d699291906150a2565b60405180910390a250505b5b50505050565b600081600001805490509050919050565b600063ffffffff8016821115612ddc576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401612dd3929190615106565b60405180910390fd5b819050919050565b600080612def61322c565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115612ebc576000600385925092509250612f66565b600060018888888860405160008152602001604052604051612ee1949392919061512f565b6020604051602081039080840390855afa158015612f03573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f5757600060016000801b93509350935050612f66565b8060008060001b935093509350505b9450945094915050565b60006003811115612f8457612f83615174565b5b826003811115612f9757612f96615174565b5b03156130d05760016003811115612fb157612fb0615174565b5b826003811115612fc457612fc3615174565b5b03612ffb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561300f5761300e615174565b5b82600381111561302257613021615174565b5b03613067578060001c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161305e919061425d565b60405180910390fd5b60038081111561307a57613079615174565b5b82600381111561308d5761308c615174565b5b036130cf57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016130c6919061431b565b60405180910390fd5b5b5050565b6130dc613776565b613112576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61311c6130d4565b600061312661176c565b9050828160030190816131399190614b77565b508181600401908161314b9190614b77565b50505050565b6131596130d4565b6000613163612165565b9050828160020190816131769190614b77565b50818160030190816131889190614b77565b506000801b81600001819055506000801b8160010181905550505050565b6131ae6130d4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036132205760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401613217919061449c565b60405180910390fd5b6132298161207c565b50565b60007f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00905090565b61325c613ec2565b826000018263ffffffff1681548110613278576132776151a3565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b613334838383613796565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ca576000613372610972565b9050600061337e6139d5565b9050808211156133c75781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016133be9291906150a2565b60405180910390fd5b50505b6133d58383836139f9565b505050565b6000806133e5612165565b905060006133f161218d565b905060008151111561340e57808051906020012092505050613453565b6000826000015490506000801b811461342c57809350505050613453565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b600080613461612165565b9050600061346d61222e565b905060008151111561348a578080519060200120925050506134cf565b6000826001015490506000801b81146134a8578093505050506134cf565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b60008115159050919050565b600060028284186134ef91906151d2565b8284166134fc9190614ca1565b905092915050565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361356a57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613561919061449c565b60405180910390fd5b806135977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613504565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051613605919061524a565b600060405180830381855af49150503d8060008114613640576040519150601f19603f3d011682016040523d82523d6000602084013e613645565b606091505b5091509150613655858383613ac4565b9250505092915050565b600034111561369a576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600081836136aa9190615261565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156137185760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161370f9291906152ea565b60405180910390fd5b819050919050565b60008061375461372e610ff0565b61374461373a886122f7565b868863ffffffff16565b87613b539092919063ffffffff16565b91509150935093915050565b6000818361376e9190615313565b905092915050565b6000613780612401565b60000160089054906101000a900460ff16905090565b60006137a061176c565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137f657818160020160008282546137ea9190614ca1565b925050819055506138cf565b60008160000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015613885578481846040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161387c93929190614ee6565b60405180910390fd5b8281038260000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361391a5781816002016000828254039250508190555061396a565b818160000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139c7919061425d565b60405180910390a350505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b6000613a036119cc565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613a5457613a5181600201613760613a4c856136b2565b613720565b50505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613aa357613aa08160020161369c613a9b856136b2565b613720565b50505b613abe613aaf85610cbc565b613ab885610cbc565b84612af1565b50505050565b606082613ad957613ad482613b70565b613b4b565b60008251148015613b01575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15613b4357836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613b3a919061449c565b60405180910390fd5b819050613b4c565b5b9392505050565b600080613b64856000018585613bb5565b91509150935093915050565b600081511115613b835780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000858054905090506000811115613dd2576000613be287600184613bdd9190614f81565b612987565b905060008160000160009054906101000a900465ffffffffffff16905060008260000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1690508765ffffffffffff168265ffffffffffff161115613c78576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603613ce357868360000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613dc3565b8860405180604001604052808a65ffffffffffff1681526020018979ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b80879550955050505050613eba565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f3a578082015181840152602081019050613f1f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f6282613f00565b613f6c8185613f0b565b9350613f7c818560208601613f1c565b613f8581613f46565b840191505092915050565b60006020820190508181036000830152613faa8184613f57565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ff182613fc6565b9050919050565b61400181613fe6565b811461400c57600080fd5b50565b60008135905061401e81613ff8565b92915050565b6000819050919050565b61403781614024565b811461404257600080fd5b50565b6000813590506140548161402e565b92915050565b6000806040838503121561407157614070613fbc565b5b600061407f8582860161400f565b925050602061409085828601614045565b9150509250929050565b60008115159050919050565b6140af8161409a565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61411282613f46565b810181811067ffffffffffffffff82111715614131576141306140da565b5b80604052505050565b6000614144613fb2565b90506141508282614109565b919050565b600067ffffffffffffffff8211156141705761416f6140da565b5b61417982613f46565b9050602081019050919050565b82818337600083830152505050565b60006141a86141a384614155565b61413a565b9050828152602081018484840111156141c4576141c36140d5565b5b6141cf848285614186565b509392505050565b600082601f8301126141ec576141eb6140d0565b5b81356141fc848260208601614195565b91505092915050565b60006020828403121561421b5761421a613fbc565b5b600082013567ffffffffffffffff81111561423957614238613fc1565b5b614245848285016141d7565b91505092915050565b61425781614024565b82525050565b6000602082019050614272600083018461424e565b92915050565b60008060006060848603121561429157614290613fbc565b5b600061429f8682870161400f565b93505060206142b08682870161400f565b92505060406142c186828701614045565b9150509250925092565b600060ff82169050919050565b6142e1816142cb565b82525050565b60006020820190506142fc60008301846142d8565b92915050565b6000819050919050565b61431581614302565b82525050565b6000602082019050614330600083018461430c565b92915050565b60006020828403121561434c5761434b613fbc565b5b600061435a84828501614045565b91505092915050565b600067ffffffffffffffff82111561437e5761437d6140da565b5b61438782613f46565b9050602081019050919050565b60006143a76143a284614363565b61413a565b9050828152602081018484840111156143c3576143c26140d5565b5b6143ce848285614186565b509392505050565b600082601f8301126143eb576143ea6140d0565b5b81356143fb848260208601614394565b91505092915050565b6000806040838503121561441b5761441a613fbc565b5b60006144298582860161400f565b925050602083013567ffffffffffffffff81111561444a57614449613fc1565b5b614456858286016143d6565b9150509250929050565b60006020828403121561447657614475613fbc565b5b60006144848482850161400f565b91505092915050565b61449681613fe6565b82525050565b60006020820190506144b1600083018461448d565b92915050565b600063ffffffff82169050919050565b6144d0816144b7565b82525050565b60006020820190506144eb60008301846144c7565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b614526816144f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61456181614024565b82525050565b60006145738383614558565b60208301905092915050565b6000602082019050919050565b60006145978261452c565b6145a18185614537565b93506145ac83614548565b8060005b838110156145dd5781516145c48882614567565b97506145cf8361457f565b9250506001810190506145b0565b5085935050505092915050565b600060e0820190506145ff600083018a61451d565b81810360208301526146118189613f57565b905081810360408301526146258188613f57565b9050614634606083018761424e565b614641608083018661448d565b61464e60a083018561430c565b81810360c0830152614660818461458c565b905098975050505050505050565b600065ffffffffffff82169050919050565b6146898161466e565b82525050565b60006020820190506146a46000830184614680565b92915050565b6146b3816142cb565b81146146be57600080fd5b50565b6000813590506146d0816146aa565b92915050565b6146df81614302565b81146146ea57600080fd5b50565b6000813590506146fc816146d6565b92915050565b60008060008060008060c0878903121561471f5761471e613fbc565b5b600061472d89828a0161400f565b965050602061473e89828a01614045565b955050604061474f89828a01614045565b945050606061476089828a016146c1565b935050608061477189828a016146ed565b92505060a061478289828a016146ed565b9150509295509295509295565b600080600080600080600060e0888a0312156147ae576147ad613fbc565b5b60006147bc8a828b0161400f565b97505060206147cd8a828b0161400f565b96505060406147de8a828b01614045565b95505060606147ef8a828b01614045565b94505060806148008a828b016146c1565b93505060a06148118a828b016146ed565b92505060c06148228a828b016146ed565b91505092959891949750929550565b6000806040838503121561484857614847613fbc565b5b60006148568582860161400f565b92505060206148678582860161400f565b9150509250929050565b61487a816144b7565b811461488557600080fd5b50565b60008135905061489781614871565b92915050565b600080604083850312156148b4576148b3613fbc565b5b60006148c28582860161400f565b92505060206148d385828601614888565b9150509250929050565b6148e68161466e565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61491b816148ec565b82525050565b60408201600082015161493760008501826148dd565b50602082015161494a6020850182614912565b50505050565b60006040820190506149656000830184614921565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b257607f821691505b6020821081036149c5576149c461496b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614a2d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149f0565b614a3786836149f0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614a74614a6f614a6a84614024565b614a4f565b614024565b9050919050565b6000819050919050565b614a8e83614a59565b614aa2614a9a82614a7b565b8484546149fd565b825550505050565b600090565b614ab7614aaa565b614ac2818484614a85565b505050565b5b81811015614ae657614adb600082614aaf565b600181019050614ac8565b5050565b601f821115614b2b57614afc816149cb565b614b05846149e0565b81016020851015614b14578190505b614b28614b20856149e0565b830182614ac7565b50505b505050565b600082821c905092915050565b6000614b4e60001984600802614b30565b1980831691505092915050565b6000614b678383614b3d565b9150826002028217905092915050565b614b8082613f00565b67ffffffffffffffff811115614b9957614b986140da565b5b614ba3825461499a565b614bae828285614aea565b600060209050601f831160018114614be15760008415614bcf578287015190505b614bd98582614b5b565b865550614c41565b601f198416614bef866149cb565b60005b82811015614c1757848901518255600182019150602085019450602081019050614bf2565b86831015614c345784890151614c30601f891682614b3d565b8355505b6001600288020188555050505b505050505050565b6000604082019050614c5e600083018561424e565b614c6b6020830184614680565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cac82614024565b9150614cb783614024565b9250828201905080821115614ccf57614cce614c72565b5b92915050565b7f45786365656473206d617820737570706c792063617000000000000000000000600082015250565b6000614d0b601683613f0b565b9150614d1682614cd5565b602082019050919050565b60006020820190508181036000830152614d3a81614cfe565b9050919050565b7f4549503731323a20556e696e697469616c697a65640000000000000000000000600082015250565b6000614d77601583613f0b565b9150614d8282614d41565b602082019050919050565b60006020820190508181036000830152614da681614d6a565b9050919050565b6000608082019050614dc2600083018761430c565b614dcf602083018661448d565b614ddc604083018561424e565b614de9606083018461424e565b95945050505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000614e2b614e26614e2184614df2565b614a4f565b614dfc565b9050919050565b614e3b81614e10565b82525050565b6000602082019050614e566000830184614e32565b92915050565b600060c082019050614e71600083018961430c565b614e7e602083018861448d565b614e8b604083018761448d565b614e98606083018661424e565b614ea5608083018561424e565b614eb260a083018461424e565b979650505050505050565b6000604082019050614ed2600083018561448d565b614edf602083018461448d565b9392505050565b6000606082019050614efb600083018661448d565b614f08602083018561424e565b614f15604083018461424e565b949350505050565b6000819050919050565b6000614f42614f3d614f3884614f1d565b614a4f565b6142cb565b9050919050565b614f5281614f27565b82525050565b6000604082019050614f6d6000830185614f49565b614f7a602083018461424e565b9392505050565b6000614f8c82614024565b9150614f9783614024565b9250828203905081811115614faf57614fae614c72565b5b92915050565b600081519050614fc4816146d6565b92915050565b600060208284031215614fe057614fdf613fbc565b5b6000614fee84828501614fb5565b91505092915050565b600060408201905061500c600083018561448d565b615019602083018461424e565b9392505050565b600060a082019050615035600083018861430c565b615042602083018761430c565b61504f604083018661430c565b61505c606083018561424e565b615069608083018461448d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506150b7600083018561424e565b6150c4602083018461424e565b9392505050565b6000819050919050565b60006150f06150eb6150e6846150cb565b614a4f565b6142cb565b9050919050565b615100816150d5565b82525050565b600060408201905061511b60008301856150f7565b615128602083018461424e565b9392505050565b6000608082019050615144600083018761430c565b61515160208301866142d8565b61515e604083018561430c565b61516b606083018461430c565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151dd82614024565b91506151e883614024565b9250826151f8576151f7615073565b5b828204905092915050565b600081519050919050565b600081905092915050565b600061522482615203565b61522e818561520e565b935061523e818560208601613f1c565b80840191505092915050565b60006152568284615219565b915081905092915050565b600061526c826148ec565b9150615277836148ec565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156152a9576152a8614c72565b5b92915050565b6000819050919050565b60006152d46152cf6152ca846152af565b614a4f565b6142cb565b9050919050565b6152e4816152b9565b82525050565b60006040820190506152ff60008301856152db565b61530c602083018461424e565b9392505050565b600061531e826148ec565b9150615329836148ec565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561535b5761535a614c72565b5b9291505056fea2646970667358221220052dad0638cbf4eff88506a32ceb8225b626b92f76fba1f9abfb1db37a0430b364736f6c634300081b0033