60806040525f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0049783f008a0085193e00003d00cd54003c71600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b60146101000a81548160ff02191690831515021790555061018f600d5f6101000a81548161ffff021916908361ffff1602179055505f600e5534801561011f575f80fd5b5060405180602001604052805f81525061013e8161037960201b60201c565b5061015b61015061038c60201b60201c565b61039360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036101f05733600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280600981526020017f5472756d7020426f780000000000000000000000000000000000000000000000815250600490816102349190610aa6565b506040518060400160405280600181526020017f5400000000000000000000000000000000000000000000000000000000000000815250600590816102799190610aa6565b50604051806060016040528060288152602001614d5d60289139600690816102a19190610aa6565b50600160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061031933600760c860405180602001604052805f81525061045660201b60201c565b5f5b606481101561037357610366600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600160405180602001604052805f81525061045660201b60201c565b808060010191505061031b565b506110c9565b80600290816103889190610aa6565b5050565b5f33905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb90610bf5565b60405180910390fd5b5f6104d361038c60201b60201c565b9050610505815f876104ea886105ff60201b60201c565b6104f9886105ff60201b60201c565b8761067760201b60201c565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055f9190610c40565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516105dc929190610c82565b60405180910390a46105f8815f8787878761067f60201b60201c565b5050505050565b60605f600167ffffffffffffffff81111561061d5761061c610876565b5b60405190808252806020026020018201604052801561064b5781602001602082028036833780820191505090505b50905082815f8151811061066257610661610ca9565b5b60200260200101818152505080915050919050565b505050505050565b6106a48473ffffffffffffffffffffffffffffffffffffffff1661085b60201b60201c565b15610853578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016106ea959493929190610d85565b6020604051808303815f875af192505050801561072557506040513d601f19601f820116820180604052508101906107229190610e3f565b60015b6107ca57610731610e76565b806308c379a00361078d5750610745610ec6565b80610750575061078f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107849190610f8d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c19061101d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906110ab565b60405180910390fd5b505b505050505050565b5f80823b90505f8111915050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806108e757607f821691505b6020821081036108fa576108f96108a3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261095c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610921565b6109668683610921565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6109aa6109a56109a08461097e565b610987565b61097e565b9050919050565b5f819050919050565b6109c383610990565b6109d76109cf826109b1565b84845461092d565b825550505050565b5f90565b6109eb6109df565b6109f68184846109ba565b505050565b5b81811015610a1957610a0e5f826109e3565b6001810190506109fc565b5050565b601f821115610a5e57610a2f81610900565b610a3884610912565b81016020851015610a47578190505b610a5b610a5385610912565b8301826109fb565b50505b505050565b5f82821c905092915050565b5f610a7e5f1984600802610a63565b1980831691505092915050565b5f610a968383610a6f565b9150826002028217905092915050565b610aaf8261086c565b67ffffffffffffffff811115610ac857610ac7610876565b5b610ad282546108d0565b610add828285610a1d565b5f60209050601f831160018114610b0e575f8415610afc578287015190505b610b068582610a8b565b865550610b6d565b601f198416610b1c86610900565b5f5b82811015610b4357848901518255600182019150602085019450602081019050610b1e565b86831015610b605784890151610b5c601f891682610a6f565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f610bdf602183610b75565b9150610bea82610b85565b604082019050919050565b5f6020820190508181035f830152610c0c81610bd3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c4a8261097e565b9150610c558361097e565b9250828201905080821115610c6d57610c6c610c13565b5b92915050565b610c7c8161097e565b82525050565b5f604082019050610c955f830185610c73565b610ca26020830184610c73565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cff82610cd6565b9050919050565b610d0f81610cf5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d5782610d15565b610d618185610d1f565b9350610d71818560208601610d2f565b610d7a81610d3d565b840191505092915050565b5f60a082019050610d985f830188610d06565b610da56020830187610d06565b610db26040830186610c73565b610dbf6060830185610c73565b8181036080830152610dd18184610d4d565b90509695505050505050565b5f604051905090565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610e1e81610dea565b8114610e28575f80fd5b50565b5f81519050610e3981610e15565b92915050565b5f60208284031215610e5457610e53610de6565b5b5f610e6184828501610e2b565b91505092915050565b5f8160e01c9050919050565b5f60033d1115610e925760045f803e610e8f5f51610e6a565b90505b90565b610e9e82610d3d565b810181811067ffffffffffffffff82111715610ebd57610ebc610876565b5b80604052505050565b5f60443d10610f5257610ed7610ddd565b60043d036004823e80513d602482011167ffffffffffffffff82111715610eff575050610f52565b808201805167ffffffffffffffff811115610f1d5750505050610f52565b80602083010160043d038501811115610f3a575050505050610f52565b610f4982602001850186610e95565b82955050505050505b90565b5f610f5f8261086c565b610f698185610b75565b9350610f79818560208601610d2f565b610f8281610d3d565b840191505092915050565b5f6020820190508181035f830152610fa58184610f55565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f611007603483610b75565b915061101282610fad565b604082019050919050565b5f6020820190508181035f83015261103481610ffb565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f611095602883610b75565b91506110a08261103b565b604082019050919050565b5f6020820190508181035f8301526110c281611089565b9050919050565b613c87806110d65f395ff3fe608060405234801561000f575f80fd5b50600436106101a6575f3560e01c80636c0360eb116100f7578063b586eda711610095578063dd4e22231161006f578063dd4e22231461047c578063e985e9c514610498578063f242432a146104c8578063f2fde38b146104e4576101a6565b8063b586eda714610424578063b638102514610442578063cdec952314610460576101a6565b80638c831b70116100d15780638c831b701461039c5780638da5cb5b146103cc57806395d89b41146103ea578063a22cb46514610408576101a6565b80636c0360eb14610358578063715018a614610376578063862440e214610380576101a6565b80630e89341c116101645780632eb2c2d61161013e5780632eb2c2d6146102d45780634e1273f4146102f057806350d87740146103205780635c66045e1461033c576101a6565b80630e89341c1461027e5780631321ad81146102ae578063156e29f6146102b8576101a6565b8062fdd58e146101aa57806301ffc9a7146101da578063030a52361461020a57806306a628d41461022657806306fdde03146102445780630d3c69b414610262575b5f80fd5b6101c460048036038101906101bf9190612432565b610500565b6040516101d1919061247f565b60405180910390f35b6101f460048036038101906101ef91906124ed565b6105c3565b6040516102019190612532565b60405180910390f35b610224600480360381019061021f91906125ac565b6106a4565b005b61022e6106c2565b60405161023b9190612613565b60405180910390f35b61024c6106d5565b604051610259919061269c565b60405180910390f35b61027c600480360381019061027791906126bc565b610761565b005b610298600480360381019061029391906126bc565b61081c565b6040516102a5919061269c565b60405180910390f35b6102b66108ae565b005b6102d260048036038101906102cd91906126e7565b61094c565b005b6102ee60048036038101906102e9919061291f565b6109e7565b005b61030a60048036038101906103059190612aaa565b610a88565b6040516103179190612bd7565b60405180910390f35b61033a60048036038101906103359190612bf7565b610b99565b005b61035660048036038101906103519190612c4c565b610c6d565b005b610360610c8c565b60405161036d919061269c565b60405180910390f35b61037e610d18565b005b61039a60048036038101906103959190612d15565b610d9f565b005b6103b660048036038101906103b19190612bf7565b610e67565b6040516103c39190612532565b60405180910390f35b6103d4610eb9565b6040516103e19190612d7e565b60405180910390f35b6103f2610ee1565b6040516103ff919061269c565b60405180910390f35b610422600480360381019061041d9190612dc1565b610f6d565b005b61042c61104d565b6040516104399190612532565b60405180910390f35b61044a611060565b604051610457919061247f565b60405180910390f35b61047a60048036038101906104759190612bf7565b61106c565b005b610496600480360381019061049191906125ac565b61113f565b005b6104b260048036038101906104ad9190612dff565b61122f565b6040516104bf9190612532565b60405180910390f35b6104e260048036038101906104dd9190612e3d565b6112bd565b005b6104fe60048036038101906104f99190612bf7565b6112ee565b005b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690612f40565b60405180910390fd5b5f808381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069d575061069c826113e4565b5b9050919050565b8181600c91906106b59291906122d2565b506106be61144d565b5050565b600d5f9054906101000a900461ffff1681565b600480546106e290612f8b565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90612f8b565b80156107595780601f1061073057610100808354040283529160200191610759565b820191905f5260205f20905b81548152906001019060200180831161073c57829003601f168201915b505050505081565b610769611456565b73ffffffffffffffffffffffffffffffffffffffff16610787610eb9565b73ffffffffffffffffffffffffffffffffffffffff16146107dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d490613005565b60405180910390fd5b5f600190505b818111610818576108053382600160405180602001604052805f81525061145d565b808061081090613050565b9150506107e3565b5050565b60606006805461082b90612f8b565b80601f016020809104026020016040519081016040528092919081815260200182805461085790612f8b565b80156108a25780601f10610879576101008083540402835291602001916108a2565b820191905f5260205f20905b81548152906001019060200180831161088557829003601f168201915b50505050509050919050565b5f600c600e5f8154809291906108c390613050565b91905055815481106108d8576108d7613097565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061090b816115e8565b61094960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826007600160405180602001604052805f8152506112bd565b50565b610954611456565b73ffffffffffffffffffffffffffffffffffffffff16610972610eb9565b73ffffffffffffffffffffffffffffffffffffffff16146109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90613005565b60405180910390fd5b6109e283838360405180602001604052805f81525061145d565b505050565b6109ef611456565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a355750610a3485610a2f611456565b61122f565b5b610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b90613134565b60405180910390fd5b610a818585858585611681565b5050505050565b60608151835114610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac5906131c2565b60405180910390fd5b5f835167ffffffffffffffff811115610aea57610ae9612737565b5b604051908082528060200260200182016040528015610b185781602001602082028036833780820191505090505b5090505f5b8451811015610b8e57610b64858281518110610b3c57610b3b613097565b5b6020026020010151858381518110610b5757610b56613097565b5b6020026020010151610500565b828281518110610b7757610b76613097565b5b602002602001018181525050806001019050610b1d565b508091505092915050565b610ba1611456565b73ffffffffffffffffffffffffffffffffffffffff16610bbf610eb9565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613005565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b80600d5f6101000a81548161ffff021916908361ffff16021790555050565b60068054610c9990612f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590612f8b565b8015610d105780601f10610ce757610100808354040283529160200191610d10565b820191905f5260205f20905b815481529060010190602001808311610cf357829003601f168201915b505050505081565b610d20611456565b73ffffffffffffffffffffffffffffffffffffffff16610d3e610eb9565b73ffffffffffffffffffffffffffffffffffffffff1614610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90613005565b60405180910390fd5b610d9d5f61197b565b565b610da7611456565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610eb9565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613005565b60405180910390fd5b8060069081610e2a919061337d565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610e5b919061269c565b60405180910390a25050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610eee90612f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90612f8b565b8015610f655780601f10610f3c57610100808354040283529160200191610f65565b820191905f5260205f20905b815481529060010190602001808311610f4857829003601f168201915b505050505081565b610f75610eb9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610ff7575060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90613496565b60405180910390fd5b611049611042611456565b8383611a3e565b5050565b600b60149054906101000a900460ff1681565b5f600c80549050905090565b611074611456565b73ffffffffffffffffffffffffffffffffffffffff16611092610eb9565b73ffffffffffffffffffffffffffffffffffffffff16146110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90613005565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f8282905011611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b906134fe565b60405180910390fd5b5f8282905090505f5b8181101561122957600c8484838181106111aa576111a9613097565b5b90506020020160208101906111bf9190612bf7565b908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061118d565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600b60149054906101000a900460ff166112da576112d9611ba5565b5b6112e78585858585611c0f565b5050505050565b6112f6611456565b73ffffffffffffffffffffffffffffffffffffffff16611314610eb9565b73ffffffffffffffffffffffffffffffffffffffff161461136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190613005565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf9061358c565b60405180910390fd5b6113e18161197b565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f600e81905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c29061361a565b60405180910390fd5b5f6114d4611456565b90506114f4815f876114e588611c23565b6114ee88611c23565b87611c9b565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461154e9190613638565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516115cb92919061366b565b60405180910390a46115e1815f87878787611ca3565b5050505050565b61167e816040516024016115fc9190612d7e565b6040516020818303038152906040527f2c2ecbc2000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e79565b50565b81518351146116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90613702565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613790565b60405180910390fd5b5f61173c611456565b905061174c818787878787611c9b565b5f5b84518110156118e6575f85828151811061176b5761176a613097565b5b602002602001015190505f85838151811061178957611788613097565b5b602002602001015190505f805f8481526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c9061381e565b60405180910390fd5b8181035f808581526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118d19190613638565b9250508190555050505080600101905061174e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195d92919061383c565b60405180910390a4611973818787878787611e93565b505050505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa3906138e1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b989190612532565b60405180910390a3505050565b6001600b60146101000a81548160ff0219169083151502179055505f5b600d5f9054906101000a900461ffff1661ffff16811015611bf257611be56108ae565b8080600101915050611bc2565b505f600b60146101000a81548160ff021916908315150217905550565b611c1c8585858585612069565b5050505050565b60605f600167ffffffffffffffff811115611c4157611c40612737565b5b604051908082528060200260200182016040528015611c6f5781602001602082028036833780820191505090505b50905082815f81518110611c8657611c85613097565b5b60200260200101818152505080915050919050565b505050505050565b611cc28473ffffffffffffffffffffffffffffffffffffffff16612297565b15611e71578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d08959493929190613951565b6020604051808303815f875af1925050508015611d4357506040513d601f19601f82011682018060405250810190611d4091906139bd565b60015b611de857611d4f6139f4565b806308c379a003611dab5750611d63613a13565b80611d6e5750611dad565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da2919061269c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90613b12565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690613ba0565b60405180910390fd5b505b505050505050565b611e9081611e886122a86122c7565b63ffffffff16565b50565b611eb28473ffffffffffffffffffffffffffffffffffffffff16612297565b15612061578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ef8959493929190613bbe565b6020604051808303815f875af1925050508015611f3357506040513d601f19601f82011682018060405250810190611f3091906139bd565b60015b611fd857611f3f6139f4565b806308c379a003611f9b5750611f53613a13565b80611f5e5750611f9d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f92919061269c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90613b12565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690613ba0565b60405180910390fd5b505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90613790565b60405180910390fd5b5f6120e0611456565b90506121008187876120f188611c23565b6120fa88611c23565b87611c9b565b5f805f8681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381035f808781526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808781526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546121fb9190613638565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161227892919061366b565b60405180910390a461228e828888888888611ca3565b50505050505050565b5f80823b90505f8111915050919050565b5f6a636f6e736f6c652e6c6f6790505f80835160208501845afa505050565b61236f819050919050565b828054828255905f5260205f2090810192821561235e579160200282015b8281111561235d57823573ffffffffffffffffffffffffffffffffffffffff16825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906122f0565b5b50905061236b9190612379565b5090565b612377613c24565b565b5b80821115612390575f815f90555060010161237a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123ce826123a5565b9050919050565b6123de816123c4565b81146123e8575f80fd5b50565b5f813590506123f9816123d5565b92915050565b5f819050919050565b612411816123ff565b811461241b575f80fd5b50565b5f8135905061242c81612408565b92915050565b5f80604083850312156124485761244761239d565b5b5f612455858286016123eb565b92505060206124668582860161241e565b9150509250929050565b612479816123ff565b82525050565b5f6020820190506124925f830184612470565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124cc81612498565b81146124d6575f80fd5b50565b5f813590506124e7816124c3565b92915050565b5f602082840312156125025761250161239d565b5b5f61250f848285016124d9565b91505092915050565b5f8115159050919050565b61252c81612518565b82525050565b5f6020820190506125455f830184612523565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261256c5761256b61254b565b5b8235905067ffffffffffffffff8111156125895761258861254f565b5b6020830191508360208202830111156125a5576125a4612553565b5b9250929050565b5f80602083850312156125c2576125c161239d565b5b5f83013567ffffffffffffffff8111156125df576125de6123a1565b5b6125eb85828601612557565b92509250509250929050565b5f61ffff82169050919050565b61260d816125f7565b82525050565b5f6020820190506126265f830184612604565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61266e8261262c565b6126788185612636565b9350612688818560208601612646565b61269181612654565b840191505092915050565b5f6020820190508181035f8301526126b48184612664565b905092915050565b5f602082840312156126d1576126d061239d565b5b5f6126de8482850161241e565b91505092915050565b5f805f606084860312156126fe576126fd61239d565b5b5f61270b868287016123eb565b935050602061271c8682870161241e565b925050604061272d8682870161241e565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61276d82612654565b810181811067ffffffffffffffff8211171561278c5761278b612737565b5b80604052505050565b5f61279e612394565b90506127aa8282612764565b919050565b5f67ffffffffffffffff8211156127c9576127c8612737565b5b602082029050602081019050919050565b5f6127ec6127e7846127af565b612795565b9050808382526020820190506020840283018581111561280f5761280e612553565b5b835b818110156128385780612824888261241e565b845260208401935050602081019050612811565b5050509392505050565b5f82601f8301126128565761285561254b565b5b81356128668482602086016127da565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561288d5761288c612737565b5b61289682612654565b9050602081019050919050565b828183375f83830152505050565b5f6128c36128be84612873565b612795565b9050828152602081018484840111156128df576128de61286f565b5b6128ea8482856128a3565b509392505050565b5f82601f8301126129065761290561254b565b5b81356129168482602086016128b1565b91505092915050565b5f805f805f60a086880312156129385761293761239d565b5b5f612945888289016123eb565b9550506020612956888289016123eb565b945050604086013567ffffffffffffffff811115612977576129766123a1565b5b61298388828901612842565b935050606086013567ffffffffffffffff8111156129a4576129a36123a1565b5b6129b088828901612842565b925050608086013567ffffffffffffffff8111156129d1576129d06123a1565b5b6129dd888289016128f2565b9150509295509295909350565b5f67ffffffffffffffff821115612a0457612a03612737565b5b602082029050602081019050919050565b5f612a27612a22846129ea565b612795565b90508083825260208201905060208402830185811115612a4a57612a49612553565b5b835b81811015612a735780612a5f88826123eb565b845260208401935050602081019050612a4c565b5050509392505050565b5f82601f830112612a9157612a9061254b565b5b8135612aa1848260208601612a15565b91505092915050565b5f8060408385031215612ac057612abf61239d565b5b5f83013567ffffffffffffffff811115612add57612adc6123a1565b5b612ae985828601612a7d565b925050602083013567ffffffffffffffff811115612b0a57612b096123a1565b5b612b1685828601612842565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612b52816123ff565b82525050565b5f612b638383612b49565b60208301905092915050565b5f602082019050919050565b5f612b8582612b20565b612b8f8185612b2a565b9350612b9a83612b3a565b805f5b83811015612bca578151612bb18882612b58565b9750612bbc83612b6f565b925050600181019050612b9d565b5085935050505092915050565b5f6020820190508181035f830152612bef8184612b7b565b905092915050565b5f60208284031215612c0c57612c0b61239d565b5b5f612c19848285016123eb565b91505092915050565b612c2b816125f7565b8114612c35575f80fd5b50565b5f81359050612c4681612c22565b92915050565b5f60208284031215612c6157612c6061239d565b5b5f612c6e84828501612c38565b91505092915050565b5f67ffffffffffffffff821115612c9157612c90612737565b5b612c9a82612654565b9050602081019050919050565b5f612cb9612cb484612c77565b612795565b905082815260208101848484011115612cd557612cd461286f565b5b612ce08482856128a3565b509392505050565b5f82601f830112612cfc57612cfb61254b565b5b8135612d0c848260208601612ca7565b91505092915050565b5f8060408385031215612d2b57612d2a61239d565b5b5f612d388582860161241e565b925050602083013567ffffffffffffffff811115612d5957612d586123a1565b5b612d6585828601612ce8565b9150509250929050565b612d78816123c4565b82525050565b5f602082019050612d915f830184612d6f565b92915050565b612da081612518565b8114612daa575f80fd5b50565b5f81359050612dbb81612d97565b92915050565b5f8060408385031215612dd757612dd661239d565b5b5f612de4858286016123eb565b9250506020612df585828601612dad565b9150509250929050565b5f8060408385031215612e1557612e1461239d565b5b5f612e22858286016123eb565b9250506020612e33858286016123eb565b9150509250929050565b5f805f805f60a08688031215612e5657612e5561239d565b5b5f612e63888289016123eb565b9550506020612e74888289016123eb565b9450506040612e858882890161241e565b9350506060612e968882890161241e565b925050608086013567ffffffffffffffff811115612eb757612eb66123a1565b5b612ec3888289016128f2565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f612f2a602b83612636565b9150612f3582612ed0565b604082019050919050565b5f6020820190508181035f830152612f5781612f1e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fa257607f821691505b602082108103612fb557612fb4612f5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fef602083612636565b9150612ffa82612fbb565b602082019050919050565b5f6020820190508181035f83015261301c81612fe3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61305a826123ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361308c5761308b613023565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f455243313135353a207472616e736665722063616c6c6572206973206e6f74205f8201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b5f61311e603283612636565b9150613129826130c4565b604082019050919050565b5f6020820190508181035f83015261314b81613112565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e6774685f8201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b5f6131ac602983612636565b91506131b782613152565b604082019050919050565b5f6020820190508181035f8301526131d9816131a0565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261323c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613201565b6132468683613201565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61328161327c613277846123ff565b61325e565b6123ff565b9050919050565b5f819050919050565b61329a83613267565b6132ae6132a682613288565b84845461320d565b825550505050565b5f90565b6132c26132b6565b6132cd818484613291565b505050565b5b818110156132f0576132e55f826132ba565b6001810190506132d3565b5050565b601f82111561333557613306816131e0565b61330f846131f2565b8101602085101561331e578190505b61333261332a856131f2565b8301826132d2565b50505b505050565b5f82821c905092915050565b5f6133555f198460080261333a565b1980831691505092915050565b5f61336d8383613346565b9150826002028217905092915050565b6133868261262c565b67ffffffffffffffff81111561339f5761339e612737565b5b6133a98254612f8b565b6133b48282856132f4565b5f60209050601f8311600181146133e5575f84156133d3578287015190505b6133dd8582613362565b865550613444565b601f1984166133f3866131e0565b5f5b8281101561341a578489015182556001820191506020850194506020810190506133f5565b868310156134375784890151613433601f891682613346565b8355505b6001600288020188555050505b505050505050565b7f53797374656d206572726f7200000000000000000000000000000000000000005f82015250565b5f613480600c83612636565b915061348b8261344c565b602082019050919050565b5f6020820190508181035f8301526134ad81613474565b9050919050565b7f456d707479207061636b000000000000000000000000000000000000000000005f82015250565b5f6134e8600a83612636565b91506134f3826134b4565b602082019050919050565b5f6020820190508181035f830152613515816134dc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613576602683612636565b91506135818261351c565b604082019050919050565b5f6020820190508181035f8301526135a38161356a565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613604602183612636565b915061360f826135aa565b604082019050919050565b5f6020820190508181035f830152613631816135f8565b9050919050565b5f613642826123ff565b915061364d836123ff565b925082820190508082111561366557613664613023565b5b92915050565b5f60408201905061367e5f830185612470565b61368b6020830184612470565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e677468205f8201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b5f6136ec602883612636565b91506136f782613692565b604082019050919050565b5f6020820190508181035f830152613719816136e0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61377a602583612636565b915061378582613720565b604082019050919050565b5f6020820190508181035f8301526137a78161376e565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f5f8201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b5f613808602a83612636565b9150613813826137ae565b604082019050919050565b5f6020820190508181035f830152613835816137fc565b9050919050565b5f6040820190508181035f8301526138548185612b7b565b905081810360208301526138688184612b7b565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c207374617475735f8201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b5f6138cb602983612636565b91506138d682613871565b604082019050919050565b5f6020820190508181035f8301526138f8816138bf565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613923826138ff565b61392d8185613909565b935061393d818560208601612646565b61394681612654565b840191505092915050565b5f60a0820190506139645f830188612d6f565b6139716020830187612d6f565b61397e6040830186612470565b61398b6060830185612470565b818103608083015261399d8184613919565b90509695505050505050565b5f815190506139b7816124c3565b92915050565b5f602082840312156139d2576139d161239d565b5b5f6139df848285016139a9565b91505092915050565b5f8160e01c9050919050565b5f60033d1115613a105760045f803e613a0d5f516139e8565b90505b90565b5f60443d10613a9f57613a24612394565b60043d036004823e80513d602482011167ffffffffffffffff82111715613a4c575050613a9f565b808201805167ffffffffffffffff811115613a6a5750505050613a9f565b80602083010160043d038501811115613a87575050505050613a9f565b613a9682602001850186612764565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f613afc603483612636565b9150613b0782613aa2565b604082019050919050565b5f6020820190508181035f830152613b2981613af0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f613b8a602883612636565b9150613b9582613b30565b604082019050919050565b5f6020820190508181035f830152613bb781613b7e565b9050919050565b5f60a082019050613bd15f830188612d6f565b613bde6020830187612d6f565b8181036040830152613bf08186612b7b565b90508181036060830152613c048185612b7b565b90508181036080830152613c188184613919565b90509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea26469706673582212209dcc1bafc3c6f4de5ef7e4860eba2dc32fc55f27431be171a299d9ec1b0251bc64736f6c634300081a003368747470733a2f2f7365727665722d6d657461646174612e78797a2f6d6574612f74722e6a736f6e