60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f80fd5b5061005161005660201b60201c565b6101b6565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051610148919061019d565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b6101978161017b565b82525050565b5f6020820190506101b05f83018461018e565b92915050565b6080516152e06101dc5f395f8181611b6001528181611bb50152611d6f01526152e05ff3fe60806040526004361061020e575f3560e01c8063715018a6116101175780639ab24eb01161009f578063c4d66de81161006e578063c4d66de81461078e578063d505accf146107b6578063dd62ed3e146107de578063f1127ed81461081a578063f2fde38b146108565761020e565b80639ab24eb0146106c4578063a9059cbb14610700578063ad3cb1cc1461073c578063c3cda520146107665761020e565b806384b0196e116100e657806384b0196e146105da5780638da5cb5b1461060a5780638e539e8c1461063457806391ddadf41461067057806395d89b411461069a5761020e565b8063715018a61461054a57806379cc6790146105605780637ecebe00146105885780638456cb59146105c45761020e565b806342966c681161019a578063587cde1e11610169578063587cde1e146104445780635c19a95c146104805780635c975abb146104a85780636fcfff45146104d257806370a082311461050e5761020e565b806342966c68146103ac5780634bf5d7e9146103d45780634f1ef286146103fe57806352d1902d1461041a5761020e565b8063313ce567116101e1578063313ce567146102de5780633644e515146103085780633a46b1a8146103325780633f4ba83a1461036e57806340c10f19146103845761020e565b806306fdde0314610212578063095ea7b31461023c57806318160ddd1461027857806323b872dd146102a2575b5f80fd5b34801561021d575f80fd5b5061022661087e565b6040516102339190613f1a565b60405180910390f35b348015610247575f80fd5b50610262600480360381019061025d9190613fd8565b61091c565b60405161026f9190614030565b60405180910390f35b348015610283575f80fd5b5061028c61093e565b6040516102999190614058565b60405180910390f35b3480156102ad575f80fd5b506102c860048036038101906102c39190614071565b610955565b6040516102d59190614030565b60405180910390f35b3480156102e9575f80fd5b506102f2610983565b6040516102ff91906140dc565b60405180910390f35b348015610313575f80fd5b5061031c61098b565b604051610329919061410d565b60405180910390f35b34801561033d575f80fd5b5061035860048036038101906103539190613fd8565b610999565b6040516103659190614058565b60405180910390f35b348015610379575f80fd5b50610382610a7d565b005b34801561038f575f80fd5b506103aa60048036038101906103a59190613fd8565b610a8f565b005b3480156103b7575f80fd5b506103d260048036038101906103cd9190614126565b610aa5565b005b3480156103df575f80fd5b506103e8610ab9565b6040516103f59190613f1a565b60405180910390f35b6104186004803603810190610413919061427d565b610b4d565b005b348015610425575f80fd5b5061042e610b6c565b60405161043b919061410d565b60405180910390f35b34801561044f575f80fd5b5061046a600480360381019061046591906142d7565b610b9d565b6040516104779190614311565b60405180910390f35b34801561048b575f80fd5b506104a660048036038101906104a191906142d7565b610c0f565b005b3480156104b3575f80fd5b506104bc610c28565b6040516104c99190614030565b60405180910390f35b3480156104dd575f80fd5b506104f860048036038101906104f391906142d7565b610c4a565b6040516105059190614348565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f91906142d7565b610c5b565b6040516105419190614058565b60405180910390f35b348015610555575f80fd5b5061055e610cae565b005b34801561056b575f80fd5b5061058660048036038101906105819190613fd8565b610cc1565b005b348015610593575f80fd5b506105ae60048036038101906105a991906142d7565b610ce1565b6040516105bb9190614058565b60405180910390f35b3480156105cf575f80fd5b506105d8610cf2565b005b3480156105e5575f80fd5b506105ee610d04565b6040516106019796959493929190614452565b60405180910390f35b348015610615575f80fd5b5061061e610e0d565b60405161062b9190614311565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190614126565b610e42565b6040516106679190614058565b60405180910390f35b34801561067b575f80fd5b50610684610eea565b60405161069191906144f4565b60405180910390f35b3480156106a5575f80fd5b506106ae610ef8565b6040516106bb9190613f1a565b60405180910390f35b3480156106cf575f80fd5b506106ea60048036038101906106e591906142d7565b610f96565b6040516106f79190614058565b60405180910390f35b34801561070b575f80fd5b5061072660048036038101906107219190613fd8565b61100d565b6040516107339190614030565b60405180910390f35b348015610747575f80fd5b5061075061102f565b60405161075d9190613f1a565b60405180910390f35b348015610771575f80fd5b5061078c60048036038101906107879190614561565b611068565b005b348015610799575f80fd5b506107b460048036038101906107af91906142d7565b61112d565b005b3480156107c1575f80fd5b506107dc60048036038101906107d791906145ea565b6113ac565b005b3480156107e9575f80fd5b5061080460048036038101906107ff9190614687565b6114f1565b6040516108119190614058565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b91906146ef565b611581565b60405161084d919061479d565b60405180910390f35b348015610861575f80fd5b5061087c600480360381019061087791906142d7565b61159b565b005b60605f61088961161f565b905080600301805461089a906147e3565b80601f01602080910402602001604051908101604052809291908181526020018280546108c6906147e3565b80156109115780601f106108e857610100808354040283529160200191610911565b820191905f5260205f20905b8154815290600101906020018083116108f457829003601f168201915b505050505091505090565b5f80610926611646565b905061093381858561164d565b600191505092915050565b5f8061094861161f565b9050806002015491505090565b5f8061095f611646565b905061096c85828561165f565b6109778585856116f1565b60019150509392505050565b5f6012905090565b5f6109946117e1565b905090565b5f806109a36117ef565b90505f6109ae610eea565b90508065ffffffffffff1684106109fe5783816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016109f5929190614813565b60405180910390fd5b610a57610a0a85611816565b836001015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061186f90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b610a8561195c565b610a8d6119e3565b565b610a9761195c565b610aa18282611a51565b5050565b610ab6610ab0611646565b82611ad0565b50565b6060610ac3611b4f565b65ffffffffffff16610ad3610eea565b65ffffffffffff1614610b12576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b610b55611b5e565b610b5e82611c44565b610b688282611c4f565b5050565b5f610b75611d6d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610ba76117ef565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610c18611646565b9050610c248183611df4565b5050565b5f80610c32611f11565b9050805f015f9054906101000a900460ff1691505090565b5f610c5482611f38565b9050919050565b5f80610c6561161f565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b610cb661195c565b610cbf5f611f9b565b565b610cd382610ccd611646565b8361165f565b610cdd8282611ad0565b5050565b5f610ceb8261206c565b9050919050565b610cfa61195c565b610d0261207d565b565b5f6060805f805f60605f610d166120ec565b90505f801b815f0154148015610d3157505f801b8160010154145b610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790614884565b60405180910390fd5b610d78612113565b610d806121b1565b46305f801b5f67ffffffffffffffff811115610d9f57610d9e614159565b5b604051908082528060200260200182016040528015610dcd5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b5f80610e1761224f565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f80610e4c6117ef565b90505f610e57610eea565b90508065ffffffffffff168410610ea75783816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610e9e929190614813565b60405180910390fd5b610ec5610eb385611816565b8360020161186f90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1692505050919050565b5f610ef3611b4f565b905090565b60605f610f0361161f565b9050806004018054610f14906147e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f40906147e3565b8015610f8b5780601f10610f6257610100808354040283529160200191610f8b565b820191905f5260205f20905b815481529060010190602001808311610f6e57829003601f168201915b505050505091505090565b5f80610fa06117ef565b9050610fe9816001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20612276565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f80611017611646565b90506110248185856116f1565b600191505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b834211156110ad57836040517f4683af0e0000000000000000000000000000000000000000000000000000000081526004016110a49190614058565b60405180910390fd5b5f61110e6111067fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016110eb94939291906148a2565b604051602081830303815290604052805190602001206122d8565b8585856122f1565b905061111a818761231f565b6111248188611df4565b50505050505050565b5f611136612376565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff1614801561117e5750825b90505f60018367ffffffffffffffff161480156111b157505f3073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156111bf575080155b156111f6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611243576001855f0160086101000a81548160ff0219169083151502179055505b6112b76040518060400160405280600481526020017f4f6b6579000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f6b65790000000000000000000000000000000000000000000000000000000081525061239d565b6112bf6123b3565b6112c76123bd565b6112d0866123cf565b61130e6040518060400160405280600481526020017f4f6b6579000000000000000000000000000000000000000000000000000000008152506123e3565b61131661242d565b61131e612437565b61134a3361132a610983565b600a6113369190614a41565b634327ea776113459190614a8b565b611a51565b83156113a4575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161139b9190614b21565b60405180910390a15b505050505050565b834211156113f157836040517f627913020000000000000000000000000000000000000000000000000000000081526004016113e89190614058565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861141f8c612441565b8960405160200161143596959493929190614b3a565b6040516020818303038152906040528051906020012090505f611457826122d8565b90505f611466828787876122f1565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114da57808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016114d1929190614b99565b60405180910390fd5b6114e58a8a8a61164d565b50505050505050505050565b5f806114fb61161f565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b611589613e6e565b61159383836124a1565b905092915050565b6115a361195c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611613575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161160a9190614311565b60405180910390fd5b61161c81611f9b565b50565b5f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b5f33905090565b61165a838383600161250e565b505050565b5f61166a84846114f1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116eb57818110156116dc578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016116d393929190614bc0565b60405180910390fd5b6116ea84848484035f61250e565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611761575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016117589190614311565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117d1575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016117c89190614311565b60405180910390fd5b6117dc8383836126eb565b505050565b5f6117ea6126fb565b905090565b5f7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d00905090565b5f65ffffffffffff8016821115611867576030826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161185e929190614c2e565b60405180910390fd5b819050919050565b5f80835f018054905090505f8082905060058311156118f0575f6118928461275e565b8461189d9190614c55565b90506118ab875f01826128f8565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156118de578091506118ee565b6001816118eb9190614c88565b92505b505b5f6118ff875f0187858561290a565b90505f811461194e57611920875f0160018361191b9190614c55565b6128f8565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611950565b5f5b94505050505092915050565b611964611646565b73ffffffffffffffffffffffffffffffffffffffff16611982610e0d565b73ffffffffffffffffffffffffffffffffffffffff16146119e1576119a5611646565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016119d89190614311565b60405180910390fd5b565b6119eb61297f565b5f6119f4611f11565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a39611646565b604051611a469190614311565b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac1575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611ab89190614311565b60405180910390fd5b611acc5f83836126eb565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b40575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b379190614311565b60405180910390fd5b611b4b825f836126eb565b5050565b5f611b5943611816565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611c0b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bf26129bf565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611c42576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611c4c61195c565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611cb757506040513d601f19601f82011682018060405250810190611cb49190614ccf565b60015b611cf857816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611cef9190614311565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611d5e57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611d55919061410d565b60405180910390fd5b611d688383612a12565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611df2576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f611dfd6117ef565b90505f611e0984610b9d565b905082825f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611f0b8184611f0687612a84565b612a95565b50505050565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b5f80611f426117ef565b9050611f93611f8e826001015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20612d15565b612d24565b915050919050565b5f611fa461224f565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f61207682612d7b565b9050919050565b612085612dce565b5f61208e611f11565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120d4611646565b6040516120e19190614311565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f61211e6120ec565b905080600201805461212f906147e3565b80601f016020809104026020016040519081016040528092919081815260200182805461215b906147e3565b80156121a65780601f1061217d576101008083540402835291602001916121a6565b820191905f5260205f20905b81548152906001019060200180831161218957829003601f168201915b505050505091505090565b60605f6121bc6120ec565b90508060030180546121cd906147e3565b80601f01602080910402602001604051908101604052809291908181526020018280546121f9906147e3565b80156122445780601f1061221b57610100808354040283529160200191612244565b820191905f5260205f20905b81548152906001019060200180831161222757829003601f168201915b505050505091505090565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80825f018054905090505f81146122ce576122a0835f0160018361229b9190614c55565b6128f8565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166122d0565b5f5b915050919050565b5f6122ea6122e46117e1565b83612e0f565b9050919050565b5f805f8061230188888888612e4f565b9250925092506123118282612f36565b829350505050949350505050565b5f61232983612441565b90508082146123715782816040517f752d88c0000000000000000000000000000000000000000000000000000000008152600401612368929190614cfa565b60405180910390fd5b505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6123a5613098565b6123af82826130d8565b5050565b6123bb613098565b565b6123c5613098565b6123cd613114565b565b6123d7613098565b6123e081613144565b50565b6123eb613098565b61242a816040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506131c8565b50565b612435613098565b565b61243f613098565b565b5f8061244b613219565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919060010191905055915050919050565b6124a9613e6e565b5f6124b26117ef565b905061250583826001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061324090919063ffffffff16565b91505092915050565b5f61251761161f565b90505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612589575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016125809190614311565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125f9575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125f09190614311565b60405180910390fd5b82816001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081156126e4578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516126db9190614058565b60405180910390a35b5050505050565b6126f683838361330f565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6127256133bd565b61272d613433565b4630604051602001612743959493929190614d21565b60405160208183030381529060405280519060200120905090565b5f6001821161276f578190506128f3565b5f8290505f60019050700100000000000000000000000000000000821061279f57608082901c9150604081901b90505b6801000000000000000082106127be57604082901c9150602081901b90505b64010000000082106127d957602082901c9150601081901b90505b6201000082106127f257601082901c9150600881901b90505b610100821061280a57600882901c9150600481901b90505b6010821061282157600482901c9150600281901b90505b6004821061283157600181901b90505b600181600302901c9050600181858161284d5761284c614d72565b5b048201901c9050600181858161286657612865614d72565b5b048201901c9050600181858161287f5761287e614d72565b5b048201901c9050600181858161289857612897614d72565b5b048201901c905060018185816128b1576128b0614d72565b5b048201901c905060018185816128ca576128c9614d72565b5b048201901c90506128ec8185816128e4576128e3614d72565b5b0482116134aa565b8103925050505b919050565b5f825f528160205f2001905092915050565b5f5b81831015612974575f61291f84846134b5565b90508465ffffffffffff1661293487836128f8565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff16111561295e5780925061296e565b60018161296b9190614c88565b93505b5061290c565b819050949350505050565b612987610c28565b6129bd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6129eb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6134da565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612a1b826134e3565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612a7757612a7182826135ac565b50612a80565b612a7f61362c565b5b5050565b5f612a8e82610c5b565b9050919050565b5f612a9e6117ef565b90508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612adb57505f82115b15612d0f575f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612bf7575f80612b68836001015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20613668612b638761367d565b6136ea565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508573ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612bec929190614d9f565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d0e575f80612c7f836001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20613729612c7a8761367d565b6136ea565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612d03929190614d9f565b60405180910390a250505b5b50505050565b5f815f01805490509050919050565b5f63ffffffff8016821115612d73576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401612d6a929190614dff565b60405180910390fd5b819050919050565b5f80612d85613219565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b612dd6610c28565b15612e0d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612e8b575f600385925092509250612f2c565b5f6001888888886040515f8152602001604052604051612eae9493929190614e26565b6020604051602081039080840390855afa158015612ece573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f1f575f60015f801b93509350935050612f2c565b805f805f1b935093509350505b9450945094915050565b5f6003811115612f4957612f48614e69565b5b826003811115612f5c57612f5b614e69565b5b03156130945760016003811115612f7657612f75614e69565b5b826003811115612f8957612f88614e69565b5b03612fc0576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115612fd457612fd3614e69565b5b826003811115612fe757612fe6614e69565b5b0361302b57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016130229190614058565b60405180910390fd5b60038081111561303e5761303d614e69565b5b82600381111561305157613050614e69565b5b0361309357806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161308a919061410d565b60405180910390fd5b5b5050565b6130a061373e565b6130d6576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6130e0613098565b5f6130e961161f565b9050828160030190816130fc919061502a565b508181600401908161310e919061502a565b50505050565b61311c613098565b5f613125611f11565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61314c613098565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131bc575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016131b39190614311565b60405180910390fd5b6131c581611f9b565b50565b6131d0613098565b5f6131d96120ec565b9050828160020190816131ec919061502a565b50818160030190816131fe919061502a565b505f801b815f01819055505f801b8160010181905550505050565b5f7f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00905090565b613248613e6e565b825f018263ffffffff1681548110613263576132626150f9565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61331a83838361375c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ad575f61335661093e565b90505f613361613774565b9050808211156133aa5781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016133a1929190614d9f565b60405180910390fd5b50505b6133b8838383613797565b505050565b5f806133c76120ec565b90505f6133d2612113565b90505f815111156133ee57808051906020012092505050613430565b5f825f015490505f801b811461340957809350505050613430565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f8061343d6120ec565b90505f6134486121b1565b90505f81511115613464578080519060200120925050506134a7565b5f826001015490505f801b8114613480578093505050506134a7565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f8115159050919050565b5f60028284186134c59190615126565b8284166134d29190614c88565b905092915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361353e57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016135359190614311565b60405180910390fd5b8061356a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6134da565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516135d5919061519a565b5f60405180830381855af49150503d805f811461360d576040519150601f19603f3d011682016040523d82523d5f602084013e613612565b606091505b509150915061362285838361385f565b9250505092915050565b5f341115613666576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f818361367591906151b0565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156136e25760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016136d9929190615236565b60405180910390fd5b819050919050565b5f8061371d6136f7610eea565b61370d61370388612276565b868863ffffffff16565b876138ec9092919063ffffffff16565b91509150935093915050565b5f8183613736919061525d565b905092915050565b5f613747612376565b5f0160089054906101000a900460ff16905090565b613764612dce565b61376f838383613907565b505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f6137a06117ef565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137f0576137ed816002016137296137e88561367d565b6136ea565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361383e5761383b816002016136686138368561367d565b6136ea565b50505b61385961384a85610b9d565b61385385610b9d565b84612a95565b50505050565b6060826138745761386f82613b36565b6138e4565b5f825114801561389a57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156138dc57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016138d39190614311565b60405180910390fd5b8190506138e5565b5b9392505050565b5f806138fb855f018585613b7a565b91509150935093915050565b5f61391061161f565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036139645781816002015f8282546139589190614c88565b92505081905550613a36565b5f815f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156139ef578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016139e693929190614bc0565b60405180910390fd5b828103825f015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a7f5781816002015f8282540392505081905550613acb565b81815f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b289190614058565b60405180910390a350505050565b5f81511115613b485780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f858054905090505f811115613d86575f613ba387600184613b9e9190614c55565b6128f8565b90505f815f015f9054906101000a900465ffffffffffff1690505f825f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1690508765ffffffffffff168265ffffffffffff161115613c34576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603613c9e5786835f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613d77565b8860405180604001604052808a65ffffffffffff1681526020018979ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b80879550955050505050613e66565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613eec82613eaa565b613ef68185613eb4565b9350613f06818560208601613ec4565b613f0f81613ed2565b840191505092915050565b5f6020820190508181035f830152613f328184613ee2565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f7482613f4b565b9050919050565b613f8481613f6a565b8114613f8e575f80fd5b50565b5f81359050613f9f81613f7b565b92915050565b5f819050919050565b613fb781613fa5565b8114613fc1575f80fd5b50565b5f81359050613fd281613fae565b92915050565b5f8060408385031215613fee57613fed613f43565b5b5f613ffb85828601613f91565b925050602061400c85828601613fc4565b9150509250929050565b5f8115159050919050565b61402a81614016565b82525050565b5f6020820190506140435f830184614021565b92915050565b61405281613fa5565b82525050565b5f60208201905061406b5f830184614049565b92915050565b5f805f6060848603121561408857614087613f43565b5b5f61409586828701613f91565b93505060206140a686828701613f91565b92505060406140b786828701613fc4565b9150509250925092565b5f60ff82169050919050565b6140d6816140c1565b82525050565b5f6020820190506140ef5f8301846140cd565b92915050565b5f819050919050565b614107816140f5565b82525050565b5f6020820190506141205f8301846140fe565b92915050565b5f6020828403121561413b5761413a613f43565b5b5f61414884828501613fc4565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61418f82613ed2565b810181811067ffffffffffffffff821117156141ae576141ad614159565b5b80604052505050565b5f6141c0613f3a565b90506141cc8282614186565b919050565b5f67ffffffffffffffff8211156141eb576141ea614159565b5b6141f482613ed2565b9050602081019050919050565b828183375f83830152505050565b5f61422161421c846141d1565b6141b7565b90508281526020810184848401111561423d5761423c614155565b5b614248848285614201565b509392505050565b5f82601f83011261426457614263614151565b5b813561427484826020860161420f565b91505092915050565b5f806040838503121561429357614292613f43565b5b5f6142a085828601613f91565b925050602083013567ffffffffffffffff8111156142c1576142c0613f47565b5b6142cd85828601614250565b9150509250929050565b5f602082840312156142ec576142eb613f43565b5b5f6142f984828501613f91565b91505092915050565b61430b81613f6a565b82525050565b5f6020820190506143245f830184614302565b92915050565b5f63ffffffff82169050919050565b6143428161432a565b82525050565b5f60208201905061435b5f830184614339565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61439581614361565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143cd81613fa5565b82525050565b5f6143de83836143c4565b60208301905092915050565b5f602082019050919050565b5f6144008261439b565b61440a81856143a5565b9350614415836143b5565b805f5b8381101561444557815161442c88826143d3565b9750614437836143ea565b925050600181019050614418565b5085935050505092915050565b5f60e0820190506144655f83018a61438c565b81810360208301526144778189613ee2565b9050818103604083015261448b8188613ee2565b905061449a6060830187614049565b6144a76080830186614302565b6144b460a08301856140fe565b81810360c08301526144c681846143f6565b905098975050505050505050565b5f65ffffffffffff82169050919050565b6144ee816144d4565b82525050565b5f6020820190506145075f8301846144e5565b92915050565b614516816140c1565b8114614520575f80fd5b50565b5f813590506145318161450d565b92915050565b614540816140f5565b811461454a575f80fd5b50565b5f8135905061455b81614537565b92915050565b5f805f805f8060c0878903121561457b5761457a613f43565b5b5f61458889828a01613f91565b965050602061459989828a01613fc4565b95505060406145aa89828a01613fc4565b94505060606145bb89828a01614523565b93505060806145cc89828a0161454d565b92505060a06145dd89828a0161454d565b9150509295509295509295565b5f805f805f805f60e0888a03121561460557614604613f43565b5b5f6146128a828b01613f91565b97505060206146238a828b01613f91565b96505060406146348a828b01613fc4565b95505060606146458a828b01613fc4565b94505060806146568a828b01614523565b93505060a06146678a828b0161454d565b92505060c06146788a828b0161454d565b91505092959891949750929550565b5f806040838503121561469d5761469c613f43565b5b5f6146aa85828601613f91565b92505060206146bb85828601613f91565b9150509250929050565b6146ce8161432a565b81146146d8575f80fd5b50565b5f813590506146e9816146c5565b92915050565b5f806040838503121561470557614704613f43565b5b5f61471285828601613f91565b9250506020614723858286016146db565b9150509250929050565b614736816144d4565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61476a8161473c565b82525050565b604082015f8201516147845f85018261472d565b5060208201516147976020850182614761565b50505050565b5f6040820190506147b05f830184614770565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147fa57607f821691505b60208210810361480d5761480c6147b6565b5b50919050565b5f6040820190506148265f830185614049565b61483360208301846144e5565b9392505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f61486e601583613eb4565b91506148798261483a565b602082019050919050565b5f6020820190508181035f83015261489b81614862565b9050919050565b5f6080820190506148b55f8301876140fe565b6148c26020830186614302565b6148cf6040830185614049565b6148dc6060830184614049565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561496757808604811115614943576149426148e5565b5b60018516156149525780820291505b808102905061496085614912565b9450614927565b94509492505050565b5f8261497f5760019050614a3a565b8161498c575f9050614a3a565b81600181146149a257600281146149ac576149db565b6001915050614a3a565b60ff8411156149be576149bd6148e5565b5b8360020a9150848211156149d5576149d46148e5565b5b50614a3a565b5060208310610133831016604e8410600b8410161715614a105782820a905083811115614a0b57614a0a6148e5565b5b614a3a565b614a1d848484600161491e565b92509050818404811115614a3457614a336148e5565b5b81810290505b9392505050565b5f614a4b82613fa5565b9150614a56836140c1565b9250614a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614970565b905092915050565b5f614a9582613fa5565b9150614aa083613fa5565b9250828202614aae81613fa5565b91508282048414831517614ac557614ac46148e5565b5b5092915050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f614b0b614b06614b0184614acc565b614ae8565b614ad5565b9050919050565b614b1b81614af1565b82525050565b5f602082019050614b345f830184614b12565b92915050565b5f60c082019050614b4d5f8301896140fe565b614b5a6020830188614302565b614b676040830187614302565b614b746060830186614049565b614b816080830185614049565b614b8e60a0830184614049565b979650505050505050565b5f604082019050614bac5f830185614302565b614bb96020830184614302565b9392505050565b5f606082019050614bd35f830186614302565b614be06020830185614049565b614bed6040830184614049565b949350505050565b5f819050919050565b5f614c18614c13614c0e84614bf5565b614ae8565b6140c1565b9050919050565b614c2881614bfe565b82525050565b5f604082019050614c415f830185614c1f565b614c4e6020830184614049565b9392505050565b5f614c5f82613fa5565b9150614c6a83613fa5565b9250828203905081811115614c8257614c816148e5565b5b92915050565b5f614c9282613fa5565b9150614c9d83613fa5565b9250828201905080821115614cb557614cb46148e5565b5b92915050565b5f81519050614cc981614537565b92915050565b5f60208284031215614ce457614ce3613f43565b5b5f614cf184828501614cbb565b91505092915050565b5f604082019050614d0d5f830185614302565b614d1a6020830184614049565b9392505050565b5f60a082019050614d345f8301886140fe565b614d4160208301876140fe565b614d4e60408301866140fe565b614d5b6060830185614049565b614d686080830184614302565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050614db25f830185614049565b614dbf6020830184614049565b9392505050565b5f819050919050565b5f614de9614de4614ddf84614dc6565b614ae8565b6140c1565b9050919050565b614df981614dcf565b82525050565b5f604082019050614e125f830185614df0565b614e1f6020830184614049565b9392505050565b5f608082019050614e395f8301876140fe565b614e4660208301866140cd565b614e5360408301856140fe565b614e6060608301846140fe565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614ef27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614eb7565b614efc8683614eb7565b95508019841693508086168417925050509392505050565b5f614f2e614f29614f2484613fa5565b614ae8565b613fa5565b9050919050565b5f819050919050565b614f4783614f14565b614f5b614f5382614f35565b848454614ec3565b825550505050565b5f90565b614f6f614f63565b614f7a818484614f3e565b505050565b5b81811015614f9d57614f925f82614f67565b600181019050614f80565b5050565b601f821115614fe257614fb381614e96565b614fbc84614ea8565b81016020851015614fcb578190505b614fdf614fd785614ea8565b830182614f7f565b50505b505050565b5f82821c905092915050565b5f6150025f1984600802614fe7565b1980831691505092915050565b5f61501a8383614ff3565b9150826002028217905092915050565b61503382613eaa565b67ffffffffffffffff81111561504c5761504b614159565b5b61505682546147e3565b615061828285614fa1565b5f60209050601f831160018114615092575f8415615080578287015190505b61508a858261500f565b8655506150f1565b601f1984166150a086614e96565b5f5b828110156150c7578489015182556001820191506020850194506020810190506150a2565b868310156150e457848901516150e0601f891682614ff3565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61513082613fa5565b915061513b83613fa5565b92508261514b5761514a614d72565b5b828204905092915050565b5f81519050919050565b5f81905092915050565b5f61517482615156565b61517e8185615160565b935061518e818560208601613ec4565b80840191505092915050565b5f6151a5828461516a565b915081905092915050565b5f6151ba8261473c565b91506151c58361473c565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156151f7576151f66148e5565b5b92915050565b5f819050919050565b5f61522061521b615216846151fd565b614ae8565b6140c1565b9050919050565b61523081615206565b82525050565b5f6040820190506152495f830185615227565b6152566020830184614049565b9392505050565b5f6152678261473c565b91506152728361473c565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156152a4576152a36148e5565b5b9291505056fea2646970667358221220331d96b6e248b9ee6bcb83d2150683828b7912c65346f704f3a4d21b0a817c9564736f6c634300081a0033