60806040525f600755348015610013575f5ffd5b5060405161478b38038061478b833981810160405281019061003591906106d6565b838381600490816100469190610979565b5080600590816100569190610979565b506100765f5f1b61006b6100f460201b60201c565b6100fb60201b60201c565b506100b47f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6100a96100f460201b60201c565b6100fb60201b60201c565b5050506100eb816100c96101f060201b60201c565b600a6100d59190610bb0565b846100e09190610bfa565b6101f860201b60201c565b50505050610cf3565b5f33905090565b5f61010c838361027d60201b60201c565b6101e65760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101836100f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506101ea565b5f90505b92915050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610268575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161025f9190610c4a565b60405180910390fd5b6102795f83836102e060201b60201c565b5050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610330578060035f8282546103249190610c63565b92505081905550610400565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156103ba578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103b193929190610ca5565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610447578060035f8282540392505081905550610492565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104ef9190610cda565b60405180910390a3505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61055b82610515565b810181811067ffffffffffffffff8211171561057a57610579610525565b5b80604052505050565b5f61058c6104fc565b90506105988282610552565b919050565b5f67ffffffffffffffff8211156105b7576105b6610525565b5b6105c082610515565b9050602081019050919050565b8281835e5f83830152505050565b5f6105ed6105e88461059d565b610583565b90508281526020810184848401111561060957610608610511565b5b6106148482856105cd565b509392505050565b5f82601f8301126106305761062f61050d565b5b81516106408482602086016105db565b91505092915050565b5f819050919050565b61065b81610649565b8114610665575f5ffd5b50565b5f8151905061067681610652565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106a58261067c565b9050919050565b6106b58161069b565b81146106bf575f5ffd5b50565b5f815190506106d0816106ac565b92915050565b5f5f5f5f608085870312156106ee576106ed610505565b5b5f85015167ffffffffffffffff81111561070b5761070a610509565b5b6107178782880161061c565b945050602085015167ffffffffffffffff81111561073857610737610509565b5b6107448782880161061c565b935050604061075587828801610668565b9250506060610766878288016106c2565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806107c057607f821691505b6020821081036107d3576107d261077c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107fa565b61083f86836107fa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61087a61087561087084610649565b610857565b610649565b9050919050565b5f819050919050565b61089383610860565b6108a761089f82610881565b848454610806565b825550505050565b5f5f905090565b6108be6108af565b6108c981848461088a565b505050565b5b818110156108ec576108e15f826108b6565b6001810190506108cf565b5050565b601f82111561093157610902816107d9565b61090b846107eb565b8101602085101561091a578190505b61092e610926856107eb565b8301826108ce565b50505b505050565b5f82821c905092915050565b5f6109515f1984600802610936565b1980831691505092915050565b5f6109698383610942565b9150826002028217905092915050565b61098282610772565b67ffffffffffffffff81111561099b5761099a610525565b5b6109a582546107a9565b6109b08282856108f0565b5f60209050601f8311600181146109e1575f84156109cf578287015190505b6109d9858261095e565b865550610a40565b601f1984166109ef866107d9565b5f5b82811015610a16578489015182556001820191506020850194506020810190506109f1565b86831015610a335784890151610a2f601f891682610942565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610aca57808604811115610aa657610aa5610a48565b5b6001851615610ab55780820291505b8081029050610ac385610a75565b9450610a8a565b94509492505050565b5f82610ae25760019050610b9d565b81610aef575f9050610b9d565b8160018114610b055760028114610b0f57610b3e565b6001915050610b9d565b60ff841115610b2157610b20610a48565b5b8360020a915084821115610b3857610b37610a48565b5b50610b9d565b5060208310610133831016604e8410600b8410161715610b735782820a905083811115610b6e57610b6d610a48565b5b610b9d565b610b808484846001610a81565b92509050818404811115610b9757610b96610a48565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610bba82610649565b9150610bc583610ba4565b9250610bf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610ad3565b905092915050565b5f610c0482610649565b9150610c0f83610649565b9250828202610c1d81610649565b91508282048414831517610c3457610c33610a48565b5b5092915050565b610c448161069b565b82525050565b5f602082019050610c5d5f830184610c3b565b92915050565b5f610c6d82610649565b9150610c7883610649565b9250828201905080821115610c9057610c8f610a48565b5b92915050565b610c9f81610649565b82525050565b5f606082019050610cb85f830186610c3b565b610cc56020830185610c96565b610cd26040830184610c96565b949350505050565b5f602082019050610ced5f830184610c96565b92915050565b613a8b80610d005f395ff3fe608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c8063835b619f11610102578063b54e5ccc116100a0578063d547741f1161006f578063d547741f14610564578063d93552a014610580578063dd62ed3e1461059e578063f6127819146105ce576101d8565b8063b54e5ccc14610502578063c3b68c4214610520578063c86b7b2c1461053c578063cdd78e8f14610546576101d8565b806395d89b41116100dc57806395d89b41146104545780639dde26d314610472578063a9059cbb146104a2578063b29e942e146104d2576101d8565b8063835b619f146103ec5780638addae281461040857806391d1485414610424576101d8565b8063248a9ca31161017a57806336568abe1161014957806336568abe146103685780635e1e39321461038457806370a08231146103a057806375c9fe3c146103d0576101d8565b8063248a9ca3146102e25780632d1612c3146103125780632f2ff15d1461032e578063313ce5671461034a576101d8565b8063095ea7b3116101b6578063095ea7b31461024657806318160ddd1461027657806323b872dd1461029457806323e7e610146102c4576101d8565b806301efb376146101dc57806301ffc9a7146101f857806306fdde0314610228575b5f5ffd5b6101f660048036038101906101f19190612a83565b6105fe565b005b610212600480360381019061020d9190612b1f565b610694565b60405161021f9190612b64565b60405180910390f35b61023061070d565b60405161023d9190612bdd565b60405180910390f35b610260600480360381019061025b9190612c8a565b61079d565b60405161026d9190612b64565b60405180910390f35b61027e6107bf565b60405161028b9190612cd7565b60405180910390f35b6102ae60048036038101906102a99190612cf0565b6107c8565b6040516102bb9190612b64565b60405180910390f35b6102cc6107f6565b6040516102d99190612d58565b60405180910390f35b6102fc60048036038101906102f79190612d9b565b61081a565b6040516103099190612d58565b60405180910390f35b61032c60048036038101906103279190612a83565b610836565b005b61034860048036038101906103439190612dc6565b610921565b005b610352610943565b60405161035f9190612e1f565b60405180910390f35b610382600480360381019061037d9190612dc6565b61094b565b005b61039e60048036038101906103999190612e6b565b6109c6565b005b6103ba60048036038101906103b59190612e96565b6109fb565b6040516103c79190612cd7565b60405180910390f35b6103ea60048036038101906103e59190612a83565b610a41565b005b61040660048036038101906104019190612ec1565b610ad3565b005b610422600480360381019061041d9190612a83565b610c67565b005b61043e60048036038101906104399190612dc6565b610cfa565b60405161044b9190612b64565b60405180910390f35b61045c610d5d565b6040516104699190612bdd565b60405180910390f35b61048c60048036038101906104879190612a83565b610ded565b6040516104999190612cd7565b60405180910390f35b6104bc60048036038101906104b79190612c8a565b610e87565b6040516104c99190612b64565b60405180910390f35b6104ec60048036038101906104e79190612a83565b610ea9565b6040516104f99190612bdd565b60405180910390f35b61050a610fb0565b6040516105179190612d58565b60405180910390f35b61053a60048036038101906105359190612a83565b610fd3565b005b61054461105c565b005b61054e61111d565b60405161055b9190612d58565b60405180910390f35b61057e60048036038101906105799190612dc6565b611123565b005b610588611145565b6040516105959190612cd7565b60405180910390f35b6105b860048036038101906105b39190612f1b565b61114e565b6040516105c59190612cd7565b60405180910390f35b6105e860048036038101906105e39190612a83565b6111d0565b6040516105f59190612b64565b60405180910390f35b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6106288161125d565b60405180602001604052805f815250600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20836040516106759190612f93565b9081526020016040518091039020908161068f91906131a6565b505050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610706575061070582611271565b5b9050919050565b60606004805461071c90612fd6565b80601f016020809104026020016040519081016040528092919081815260200182805461074890612fd6565b80156107935780601f1061076a57610100808354040283529160200191610793565b820191905f5260205f20905b81548152906001019060200180831161077657829003601f168201915b5050505050905090565b5f5f6107a76112da565b90506107b48185856112e1565b600191505092915050565b5f600354905090565b5f5f6107d26112da565b90506107df8582856112f3565b6107ea858585611385565b60019150509392505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81565b5f5f5f8381526020019081526020015f20600101549050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6108608161125d565b816006908161086f91906131a6565b506001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516108b19190612f93565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055506108de82611600565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61092a8261081a565b6109338161125d565b61093d83836117f8565b50505050565b5f6012905090565b6109536112da565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c182826118e1565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6109f08161125d565b816007819055505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610a6b8161125d565b5f600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610aab9190612f93565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610afd8161125d565b5f610b06610943565b600a610b1291906133d1565b90505f600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610b539190612f93565b90815260200160405180910390208054905003610bea57600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2084604051610ba89190612f93565b90815260200160405180910390208184610bc2919061341b565b908060018154018082558091505060019003905f5260205f20015f9091909190915055610c61565b8083610bf6919061341b565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610c349190612f93565b90815260200160405180910390205f81548110610c5457610c5361345c565b5b905f5260205f2001819055505b50505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610c918161125d565b6001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610cd29190612f93565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610d6c90612fd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9890612fd6565b8015610de35780601f10610dba57610100808354040283529160200191610de3565b820191905f5260205f20905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610e188161125d565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610e569190612f93565b90815260200160405180910390205f81548110610e7657610e7561345c565b5b905f5260205f200154915050919050565b5f5f610e916112da565b9050610e9e818585611385565b600191505092915050565b60607f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ed58161125d565b600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610f139190612f93565b90815260200160405180910390208054610f2c90612fd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5890612fd6565b8015610fa35780601f10610f7a57610100808354040283529160200191610fa3565b820191905f5260205f20905b815481529060010190602001808311610f8657829003601f168201915b5050505050915050919050565b7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ffd8161125d565b6004600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208360405161103d9190612f93565b9081526020016040518091039020908161105791906134b0565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6110868161125d565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111491906135a9565b60098190555050565b5f5f1b81565b61112c8261081a565b6111358161125d565b61113f83836118e1565b50505050565b5f600954905090565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6111fb8161125d565b600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208360405161123a9190612f93565b90815260200160405180910390205f9054906101000a900460ff16915050919050565b61126e816112696112da565b6119ca565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b6112ee8383836001611a1b565b505050565b5f6112fe848461114e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461137f5781811015611370578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611367939291906135e3565b60405180910390fd5b61137e84848484035f611a1b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113f5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113ec9190613618565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611465575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161145c9190613618565b60405180910390fd5b5f600367ffffffffffffffff8111156114815761148061295f565b5b6040519080825280602002602001820160405280156114b457816020015b606081526020019060019003908161149f5790505b5090506114c084611bea565b815f815181106114d3576114d261345c565b5b60200260200101819052506114e783611bea565b816001815181106114fb576114fa61345c565b5b602002602001018190525061150f82611ee8565b816002815181106115235761152261345c565b5b60200260200101819052505f61153882612041565b905080611543575f5ffd5b61154e858585612685565b5f6006805461155c90612fd6565b905011156115f95760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f291906135a9565b6009819055505b5050505050565b5f5f829050602a815114611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116409061367b565b60405180910390fd5b5f5f90505f600290505b602a8110156117ed575f8382815181106116705761166f61345c565b5b602001015160f81c60f81b60f81c60ff16905060308173ffffffffffffffffffffffffffffffffffffffff16101580156116c1575060398173ffffffffffffffffffffffffffffffffffffffff1611155b156116da576030816116d39190613699565b90506117c5565b60418173ffffffffffffffffffffffffffffffffffffffff1610158015611718575060468173ffffffffffffffffffffffffffffffffffffffff1611155b156117315760378161172a9190613699565b90506117c4565b60618173ffffffffffffffffffffffffffffffffffffffff161015801561176f575060668173ffffffffffffffffffffffffffffffffffffffff1611155b15611788576057816117819190613699565b90506117c3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613750565b60405180910390fd5b5b5b806010846117d3919061376e565b6117dd91906137af565b9250508080600101915050611653565b508092505050919050565b5f6118038383610cfa565b6118d75760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506118746112da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506118db565b5f90505b92915050565b5f6118ec8383610cfa565b156119c0575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061195d6112da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506119c4565b5f90505b92915050565b6119d48282610cfa565b611a175780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611a0e9291906137f6565b60405180910390fd5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a8b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a829190613618565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611afb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611af29190613618565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611be4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bdb9190612cd7565b60405180910390a35b50505050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff811115611c5d57611c5c61295f565b5b6040519080825280601f01601f191660200182016040528015611c8f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611cc657611cc561345c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d2957611d2861345c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b6014811015611edc5782600485600c84611d76919061381d565b60208110611d8757611d8661345c565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611dc657611dc561345c565b5b602001015160f81c60f81b82600283611ddf919061341b565b6002611deb919061381d565b81518110611dfc57611dfb61345c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c84611e3e919061381d565b60208110611e4f57611e4e61345c565b5b1a60f81b1660f81c60ff1681518110611e6b57611e6a61345c565b5b602001015160f81c60f81b82600283611e84919061341b565b6003611e90919061381d565b81518110611ea157611ea061345c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611d5c565b50809350505050919050565b60605f8203611f2e576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203c565b5f8290505f5b5f8214611f5d578080611f4690613850565b915050600a82611f5691906138c4565b9150611f34565b5f8167ffffffffffffffff811115611f7857611f7761295f565b5b6040519080825280601f01601f191660200182016040528015611faa5781602001600182028036833780820191505090505b5090505b5f851461203557600182611fc291906138f4565b9150600a85611fd19190613927565b6030611fdd919061381d565b60f81b818381518110611ff357611ff261345c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561202e91906138c4565b9450611fae565b8093505050505b919050565b5f6003825114612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d906139a1565b60405180910390fd5b5f825f8151811061209a5761209961345c565b5b602002602001015190505f836001815181106120b9576120b861345c565b5b602002602001015190505f6120e8856002815181106120db576120da61345c565b5b60200260200101516128a1565b905060066040516020016120fc9190613a3f565b60405160208183030381529060405280519060200120836040516020016121239190612f93565b604051602081830303815290604052805190602001201480156121d4575060095460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d291906135a9565b105b80156122375750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208260405161221a9190612f93565b90815260200160405180910390205f9054906101000a900460ff16155b15612247575f9350505050612680565b5f6007541261245b5760046040516020016122629190613a3f565b60405160208183030381529060405280519060200120600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122b69190612f93565b90815260200160405180910390206040516020016122d49190613a3f565b60405160208183030381529060405280519060200120036124565780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161232e9190612f93565b90815260200160405180910390205f8154811061234e5761234d61345c565b5b905f5260205f2001541015801561236457505f81115b1561244a5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123a89190612f93565b90815260200160405180910390205f815481106123c8576123c761345c565b5b905f5260205f2001546123db91906138f4565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516124199190612f93565b90815260200160405180910390205f815481106124395761243861345c565b5b905f5260205f200181905550612455565b5f9350505050612680565b5b612678565b600660405160200161246d9190613a3f565b60405160208183030381529060405280519060200120836040516020016124949190612f93565b60405160208183030381529060405280519060200120148061250c5750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516124f09190612f93565b90815260200160405180910390205f9054906101000a900460ff165b6126775780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161254f9190612f93565b90815260200160405180910390205f8154811061256f5761256e61345c565b5b905f5260205f2001541015801561258557505f81115b1561266b5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125c99190612f93565b90815260200160405180910390205f815481106125e9576125e861345c565b5b905f5260205f2001546125fc91906138f4565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161263a9190612f93565b90815260200160405180910390205f8154811061265a5761265961345c565b5b905f5260205f200181905550612676565b5f9350505050612680565b5b5b600193505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d5578060035f8282546126c9919061381d565b925050819055506127a5565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561275f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612756939291906135e3565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ec578060035f8282540392505081905550612837565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128949190612cd7565b60405180910390a3505050565b5f5f8290505f5f90505f5f90505b825181101561292b575f8382815181106128cc576128cb61345c565b5b602001015160f81c60f81b60f81c60ff169050603081101580156128f1575060398111155b1561291d5760308161290391906138f4565b600a84612910919061341b565b61291a919061381d565b92505b5080806001019150506128af565b508092505050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129958261294f565b810181811067ffffffffffffffff821117156129b4576129b361295f565b5b80604052505050565b5f6129c6612936565b90506129d2828261298c565b919050565b5f67ffffffffffffffff8211156129f1576129f061295f565b5b6129fa8261294f565b9050602081019050919050565b828183375f83830152505050565b5f612a27612a22846129d7565b6129bd565b905082815260208101848484011115612a4357612a4261294b565b5b612a4e848285612a07565b509392505050565b5f82601f830112612a6a57612a69612947565b5b8135612a7a848260208601612a15565b91505092915050565b5f60208284031215612a9857612a9761293f565b5b5f82013567ffffffffffffffff811115612ab557612ab4612943565b5b612ac184828501612a56565b91505092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612afe81612aca565b8114612b08575f5ffd5b50565b5f81359050612b1981612af5565b92915050565b5f60208284031215612b3457612b3361293f565b5b5f612b4184828501612b0b565b91505092915050565b5f8115159050919050565b612b5e81612b4a565b82525050565b5f602082019050612b775f830184612b55565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f612baf82612b7d565b612bb98185612b87565b9350612bc9818560208601612b97565b612bd28161294f565b840191505092915050565b5f6020820190508181035f830152612bf58184612ba5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c2682612bfd565b9050919050565b612c3681612c1c565b8114612c40575f5ffd5b50565b5f81359050612c5181612c2d565b92915050565b5f819050919050565b612c6981612c57565b8114612c73575f5ffd5b50565b5f81359050612c8481612c60565b92915050565b5f5f60408385031215612ca057612c9f61293f565b5b5f612cad85828601612c43565b9250506020612cbe85828601612c76565b9150509250929050565b612cd181612c57565b82525050565b5f602082019050612cea5f830184612cc8565b92915050565b5f5f5f60608486031215612d0757612d0661293f565b5b5f612d1486828701612c43565b9350506020612d2586828701612c43565b9250506040612d3686828701612c76565b9150509250925092565b5f819050919050565b612d5281612d40565b82525050565b5f602082019050612d6b5f830184612d49565b92915050565b612d7a81612d40565b8114612d84575f5ffd5b50565b5f81359050612d9581612d71565b92915050565b5f60208284031215612db057612daf61293f565b5b5f612dbd84828501612d87565b91505092915050565b5f5f60408385031215612ddc57612ddb61293f565b5b5f612de985828601612d87565b9250506020612dfa85828601612c43565b9150509250929050565b5f60ff82169050919050565b612e1981612e04565b82525050565b5f602082019050612e325f830184612e10565b92915050565b5f819050919050565b612e4a81612e38565b8114612e54575f5ffd5b50565b5f81359050612e6581612e41565b92915050565b5f60208284031215612e8057612e7f61293f565b5b5f612e8d84828501612e57565b91505092915050565b5f60208284031215612eab57612eaa61293f565b5b5f612eb884828501612c43565b91505092915050565b5f5f60408385031215612ed757612ed661293f565b5b5f83013567ffffffffffffffff811115612ef457612ef3612943565b5b612f0085828601612a56565b9250506020612f1185828601612c76565b9150509250929050565b5f5f60408385031215612f3157612f3061293f565b5b5f612f3e85828601612c43565b9250506020612f4f85828601612c43565b9150509250929050565b5f81905092915050565b5f612f6d82612b7d565b612f778185612f59565b9350612f87818560208601612b97565b80840191505092915050565b5f612f9e8284612f63565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fed57607f821691505b60208210810361300057612fff612fa9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613027565b61306c8683613027565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130a76130a261309d84612c57565b613084565b612c57565b9050919050565b5f819050919050565b6130c08361308d565b6130d46130cc826130ae565b848454613033565b825550505050565b5f5f905090565b6130eb6130dc565b6130f68184846130b7565b505050565b5b818110156131195761310e5f826130e3565b6001810190506130fc565b5050565b601f82111561315e5761312f81613006565b61313884613018565b81016020851015613147578190505b61315b61315385613018565b8301826130fb565b50505b505050565b5f82821c905092915050565b5f61317e5f1984600802613163565b1980831691505092915050565b5f613196838361316f565b9150826002028217905092915050565b6131af82612b7d565b67ffffffffffffffff8111156131c8576131c761295f565b5b6131d28254612fd6565b6131dd82828561311d565b5f60209050601f83116001811461320e575f84156131fc578287015190505b613206858261318b565b86555061326d565b601f19841661321c86613006565b5f5b828110156132435784890151825560018201915060208501945060208101905061321e565b86831015613260578489015161325c601f89168261316f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156132f7578086048111156132d3576132d2613275565b5b60018516156132e25780820291505b80810290506132f0856132a2565b94506132b7565b94509492505050565b5f8261330f57600190506133ca565b8161331c575f90506133ca565b8160018114613332576002811461333c5761336b565b60019150506133ca565b60ff84111561334e5761334d613275565b5b8360020a91508482111561336557613364613275565b5b506133ca565b5060208310610133831016604e8410600b84101617156133a05782820a90508381111561339b5761339a613275565b5b6133ca565b6133ad84848460016132ae565b925090508184048111156133c4576133c3613275565b5b81810290505b9392505050565b5f6133db82612c57565b91506133e683612e04565b92506134137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613300565b905092915050565b5f61342582612c57565b915061343083612c57565b925082820261343e81612c57565b9150828204841483151761345557613454613275565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8154905061349781612fd6565b9050919050565b5f819050815f5260205f209050919050565b8181036134be575050613593565b6134c782613489565b67ffffffffffffffff8111156134e0576134df61295f565b5b6134ea8254612fd6565b6134f582828561311d565b5f601f831160018114613522575f8415613510578287015490505b61351a858261318b565b86555061358c565b601f1984166135308761349e565b965061353b86613006565b5f5b828110156135625784890154825560018201915060018501945060208101905061353d565b8683101561357f578489015461357b601f89168261316f565b8355505b6001600288020188555050505b5050505050505b565b5f815190506135a381612c60565b92915050565b5f602082840312156135be576135bd61293f565b5b5f6135cb84828501613595565b91505092915050565b6135dd81612c1c565b82525050565b5f6060820190506135f65f8301866135d4565b6136036020830185612cc8565b6136106040830184612cc8565b949350505050565b5f60208201905061362b5f8301846135d4565b92915050565b7f496e76616c69642061646472657373206c656e677468000000000000000000005f82015250565b5f613665601683612b87565b915061367082613631565b602082019050919050565b5f6020820190508181035f83015261369281613659565b9050919050565b5f6136a382612bfd565b91506136ae83612bfd565b9250828203905073ffffffffffffffffffffffffffffffffffffffff8111156136da576136d9613275565b5b92915050565b7f496e76616c69642063686172616374657220696e2061646472657373207374725f8201527f696e672e00000000000000000000000000000000000000000000000000000000602082015250565b5f61373a602483612b87565b9150613745826136e0565b604082019050919050565b5f6020820190508181035f8301526137678161372e565b9050919050565b5f61377882612bfd565b915061378383612bfd565b925082820261379181612bfd565b915082820484148315176137a8576137a7613275565b5b5092915050565b5f6137b982612bfd565b91506137c483612bfd565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156137f0576137ef613275565b5b92915050565b5f6040820190506138095f8301856135d4565b6138166020830184612d49565b9392505050565b5f61382782612c57565b915061383283612c57565b925082820190508082111561384a57613849613275565b5b92915050565b5f61385a82612c57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361388c5761388b613275565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138ce82612c57565b91506138d983612c57565b9250826138e9576138e8613897565b5b828204905092915050565b5f6138fe82612c57565b915061390983612c57565b925082820390508181111561392157613920613275565b5b92915050565b5f61393182612c57565b915061393c83612c57565b92508261394c5761394b613897565b5b828206905092915050565b7f496e76616c696420706172616d6574657220636f756e740000000000000000005f82015250565b5f61398b601783612b87565b915061399682613957565b602082019050919050565b5f6020820190508181035f8301526139b88161397f565b9050919050565b5f81546139cb81612fd6565b6139d58186612f59565b9450600182165f81146139ef5760018114613a0457613a36565b60ff1983168652811515820286019350613a36565b613a0d85613006565b5f5b83811015613a2e57815481890152600182019150602081019050613a0f565b838801955050505b50505092915050565b5f613a4a82846139bf565b91508190509291505056fea264697066735822122068ba7fefb5d8ae52b542c698287c8da0b62fa7574d466955327fc14f110148ce64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000047868c01000000000000000000000000196dede81968d246d9f0378530f7bcb254a164c900000000000000000000000000000000000000000000000000000000000000034d5654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d56540000000000000000000000000000000000000000000000000000000000