608060405234801561000f575f80fd5b5033604051806080016040528060558152602001613e58605591396100398161015060201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100aa575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a19190610c7d565b60405180910390fd5b6100b98161016360201b60201c565b505f6100c961022660201b60201c565b9050806040516020016100dc9190610d32565b604051602081830303815290604052600490816100f99190610f83565b508060405160200161010b919061109c565b604051602081830303815290604052600590816101289190610f83565b5061014a335f600160405180602001604052805f81525061039b60201b60201c565b5061159e565b806002908161015f9190610f83565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60605f604051806060016040528060348152602001613ead6034913990505f6003600642443360405160200161025e93929190611122565b604051602081830303815290604052805190602001205f1c610280919061118b565b61028a91906111e8565b90505f8167ffffffffffffffff8111156102a7576102a6610d53565b5b6040519080825280601f01601f1916602001820160405280156102d95781602001600182028036833780820191505090505b5090505f5b82811015610391575f845142443385604051602001610300949392919061121b565b604051602081830303815290604052805190602001205f1c610322919061118b565b905084818151811061033757610336611268565b5b602001015160f81c60f81b83838151811061035557610354611268565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505080806001019150506102de565b5080935050505090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361040b575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016104029190610c7d565b60405180910390fd5b5f8061041d858561043c60201b60201c565b915091506104345f8784848761046c60201b60201c565b505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b61047e8585858561053060201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610529575f6104c06108c660201b60201c565b90506001845103610512575f6104df5f866108cd60201b90919060201c565b90505f6104f55f866108cd60201b90919060201c565b905061050b8389898585896108e060201b60201c565b5050610527565b610526818787878787610a8f60201b60201c565b5b505b5050505050565b805182511461057a57815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016105719291906112a4565b60405180910390fd5b5f6105896108c660201b60201c565b90505f5b8351811015610785575f6105aa82866108cd60201b90919060201c565b90505f6105c083866108cd60201b90919060201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146106e3575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561068f57888183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161068694939291906112cb565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461077857805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461077091906111e8565b925050819055505b505080600101905061058d565b506001835103610840575f6107a35f856108cd60201b90919060201c565b90505f6107b95f856108cd60201b90919060201c565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516108319291906112a4565b60405180910390a450506108bf565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516108b69291906113c5565b60405180910390a45b5050505050565b5f33905090565b5f60208202602084010151905092915050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115610a87578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161094095949392919061145c565b6020604051808303815f875af192505050801561097b57506040513d601f19601f82011682018060405250810190610978919061150d565b60015b6109fc573d805f81146109a9576040519150601f19603f3d011682016040523d82523d5f602084013e6109ae565b606091505b505f8151036109f457846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016109eb9190610c7d565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610a8557846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610a7c9190610c7d565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115610c36578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401610aef959493929190611538565b6020604051808303815f875af1925050508015610b2a57506040513d601f19601f82011682018060405250810190610b27919061150d565b60015b610bab573d805f8114610b58576040519150601f19603f3d011682016040523d82523d5f602084013e610b5d565b606091505b505f815103610ba357846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610b9a9190610c7d565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610c3457846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610c2b9190610c7d565b60405180910390fd5b505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c6782610c3e565b9050919050565b610c7781610c5d565b82525050565b5f602082019050610c905f830184610c6e565b92915050565b5f81905092915050565b7f457468657265756d2000000000000000000000000000000000000000000000005f82015250565b5f610cd4600983610c96565b9150610cdf82610ca0565b600982019050919050565b5f81519050919050565b8281835e5f83830152505050565b5f610d0c82610cea565b610d168185610c96565b9350610d26818560208601610cf4565b80840191505092915050565b5f610d3c82610cc8565b9150610d488284610d02565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610dc457607f821691505b602082108103610dd757610dd6610d80565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610e397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610dfe565b610e438683610dfe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610e87610e82610e7d84610e5b565b610e64565b610e5b565b9050919050565b5f819050919050565b610ea083610e6d565b610eb4610eac82610e8e565b848454610e0a565b825550505050565b5f90565b610ec8610ebc565b610ed3818484610e97565b505050565b5b81811015610ef657610eeb5f82610ec0565b600181019050610ed9565b5050565b601f821115610f3b57610f0c81610ddd565b610f1584610def565b81016020851015610f24578190505b610f38610f3085610def565b830182610ed8565b50505b505050565b5f82821c905092915050565b5f610f5b5f1984600802610f40565b1980831691505092915050565b5f610f738383610f4c565b9150826002028217905092915050565b610f8c82610cea565b67ffffffffffffffff811115610fa557610fa4610d53565b5b610faf8254610dad565b610fba828285610efa565b5f60209050601f831160018114610feb575f8415610fd9578287015190505b610fe38582610f68565b86555061104a565b601f198416610ff986610ddd565b5f5b8281101561102057848901518255600182019150602085019450602081019050610ffb565b8683101561103d5784890151611039601f891682610f4c565b8355505b6001600288020188555050505b505050505050565b7f414c4600000000000000000000000000000000000000000000000000000000005f82015250565b5f611086600383610c96565b915061109182611052565b600382019050919050565b5f6110a68261107a565b91506110b28284610d02565b915081905092915050565b5f819050919050565b6110d76110d282610e5b565b6110bd565b82525050565b5f8160601b9050919050565b5f6110f3826110dd565b9050919050565b5f611104826110e9565b9050919050565b61111c61111782610c5d565b6110fa565b82525050565b5f61112d82866110c6565b60208201915061113d82856110c6565b60208201915061114d828461110b565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61119582610e5b565b91506111a083610e5b565b9250826111b0576111af61115e565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6111f282610e5b565b91506111fd83610e5b565b9250828201905080821115611215576112146111bb565b5b92915050565b5f61122682876110c6565b60208201915061123682866110c6565b602082019150611246828561110b565b60148201915061125682846110c6565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61129e81610e5b565b82525050565b5f6040820190506112b75f830185611295565b6112c46020830184611295565b9392505050565b5f6080820190506112de5f830187610c6e565b6112eb6020830186611295565b6112f86040830185611295565b6113056060830184611295565b95945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61134081610e5b565b82525050565b5f6113518383611337565b60208301905092915050565b5f602082019050919050565b5f6113738261130e565b61137d8185611318565b935061138883611328565b805f5b838110156113b857815161139f8882611346565b97506113aa8361135d565b92505060018101905061138b565b5085935050505092915050565b5f6040820190508181035f8301526113dd8185611369565b905081810360208301526113f18184611369565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f601f19601f8301169050919050565b5f61142e826113fa565b6114388185611404565b9350611448818560208601610cf4565b61145181611414565b840191505092915050565b5f60a08201905061146f5f830188610c6e565b61147c6020830187610c6e565b6114896040830186611295565b6114966060830185611295565b81810360808301526114a88184611424565b90509695505050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114ec816114b8565b81146114f6575f80fd5b50565b5f81519050611507816114e3565b92915050565b5f60208284031215611522576115216114b4565b5b5f61152f848285016114f9565b91505092915050565b5f60a08201905061154b5f830188610c6e565b6115586020830187610c6e565b818103604083015261156a8186611369565b9050818103606083015261157e8185611369565b905081810360808301526115928184611424565b90509695505050505050565b6128ad806115ab5f395ff3fe608060405234801561000f575f80fd5b50600436106100fd575f3560e01c80634e1273f411610095578063a22cb46511610064578063a22cb46514610295578063e985e9c5146102b1578063f242432a146102e1578063f2fde38b146102fd576100fd565b80634e1273f41461021f578063715018a61461024f5780638da5cb5b1461025957806395d89b4114610277576100fd565b80630e89341c116100d15780630e89341c1461019b5780632eb2c2d6146101cb57806343807e58146101e7578063441ff99814610203576100fd565b8062fdd58e1461010157806301ffc9a71461013157806302fe53051461016157806306fdde031461017d575b5f80fd5b61011b600480360381019061011691906118c2565b610319565b604051610128919061190f565b60405180910390f35b61014b6004803603810190610146919061197d565b61036e565b60405161015891906119c2565b60405180910390f35b61017b60048036038101906101769190611b17565b61044f565b005b610185610463565b6040516101929190611bbe565b60405180910390f35b6101b560048036038101906101b09190611bde565b6104f3565b6040516101c29190611bbe565b60405180910390f35b6101e560048036038101906101e09190611d6b565b610585565b005b61020160048036038101906101fc9190611e8f565b61062c565b005b61021d60048036038101906102189190611e8f565b610696565b005b61023960048036038101906102349190611f9a565b610763565b60405161024691906120c7565b60405180910390f35b61025761086a565b005b61026161087d565b60405161026e91906120f6565b60405180910390f35b61027f6108a5565b60405161028c9190611bbe565b60405180910390f35b6102af60048036038101906102aa9190612139565b610935565b005b6102cb60048036038101906102c69190612177565b61094b565b6040516102d891906119c2565b60405180910390f35b6102fb60048036038101906102f691906121b5565b6109d9565b005b61031760048036038101906103129190612248565b610a80565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610448575061044782610b04565b5b9050919050565b610457610b6d565b61046081610bf4565b50565b606060048054610472906122a0565b80601f016020809104026020016040519081016040528092919081815260200182805461049e906122a0565b80156104e95780601f106104c0576101008083540402835291602001916104e9565b820191905f5260205f20905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b606060028054610502906122a0565b80601f016020809104026020016040519081016040528092919081815260200182805461052e906122a0565b80156105795780601f1061055057610100808354040283529160200191610579565b820191905f5260205f20905b81548152906001019060200180831161055c57829003601f168201915b50505050509050919050565b5f61058e610c07565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156105d357506105d1868261094b565b155b156106175780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161060e9291906122d0565b60405180910390fd5b6106248686868686610c0e565b505050505050565b610634610b6d565b5f5b828290508110156106915761068433848484818110610658576106576122f7565b5b905060200201602081019061066d9190612248565b5f600160405180602001604052805f8152506109d9565b8080600101915050610636565b505050565b61069e610b6d565b5f5b8282905081101561075e578282828181106106be576106bd6122f7565b5b90506020020160208101906106d39190612248565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f625f600160405161074992919061239f565b60405180910390a480806001019150506106a0565b505050565b606081518351146107af57815183516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016107a69291906123c6565b60405180910390fd5b5f835167ffffffffffffffff8111156107cb576107ca6119f3565b5b6040519080825280602002602001820160405280156107f95781602001602082028036833780820191505090505b5090505f5b845181101561085f5761083561081d8287610d0290919063ffffffff16565b6108308387610d1590919063ffffffff16565b610319565b828281518110610848576108476122f7565b5b6020026020010181815250508060010190506107fe565b508091505092915050565b610872610b6d565b61087b5f610d28565b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546108b4906122a0565b80601f01602080910402602001604051908101604052809291908181526020018280546108e0906122a0565b801561092b5780601f106109025761010080835404028352916020019161092b565b820191905f5260205f20905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b610947610940610c07565b8383610deb565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6109e2610c07565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610a275750610a25868261094b565b155b15610a6b5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610a629291906122d0565b60405180910390fd5b610a788686868686610f54565b505050505050565b610a88610b6d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610af8575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610aef91906120f6565b60405180910390fd5b610b0181610d28565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b75610c07565b73ffffffffffffffffffffffffffffffffffffffff16610b9361087d565b73ffffffffffffffffffffffffffffffffffffffff1614610bf257610bb6610c07565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610be991906120f6565b60405180910390fd5b565b8060029081610c039190612581565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c7e575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610c7591906120f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610cee575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610ce591906120f6565b60405180910390fd5b610cfb858585858561105a565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e5b575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401610e5291906120f6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f4791906119c2565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610fc4575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610fbb91906120f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611034575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161102b91906120f6565b60405180910390fd5b5f806110408585611106565b91509150611051878784848761105a565b50505050505050565b61106685858585611136565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146110ff575f6110a2610c07565b905060018451036110ee575f6110c15f86610d1590919063ffffffff16565b90505f6110d75f86610d1590919063ffffffff16565b90506110e78389898585896114c6565b50506110fd565b6110fc818787878787611675565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b805182511461118057815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016111779291906123c6565b60405180910390fd5b5f611189610c07565b90505f5b8351811015611385575f6111aa8286610d1590919063ffffffff16565b90505f6111c08386610d1590919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112e3575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561128f57888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016112869493929190612650565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461137857805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461137091906126c0565b925050819055505b505080600101905061118d565b506001835103611440575f6113a35f85610d1590919063ffffffff16565b90505f6113b95f85610d1590919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516114319291906123c6565b60405180910390a450506114bf565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114b69291906126f3565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561166d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161152695949392919061277a565b6020604051808303815f875af192505050801561156157506040513d601f19601f8201168201806040525081019061155e91906127e6565b60015b6115e2573d805f811461158f576040519150601f19603f3d011682016040523d82523d5f602084013e611594565b606091505b505f8151036115da57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016115d191906120f6565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461166b57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161166291906120f6565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561181c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016116d5959493929190612811565b6020604051808303815f875af192505050801561171057506040513d601f19601f8201168201806040525081019061170d91906127e6565b60015b611791573d805f811461173e576040519150601f19603f3d011682016040523d82523d5f602084013e611743565b606091505b505f81510361178957846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161178091906120f6565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461181a57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161181191906120f6565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61185e82611835565b9050919050565b61186e81611854565b8114611878575f80fd5b50565b5f8135905061188981611865565b92915050565b5f819050919050565b6118a18161188f565b81146118ab575f80fd5b50565b5f813590506118bc81611898565b92915050565b5f80604083850312156118d8576118d761182d565b5b5f6118e58582860161187b565b92505060206118f6858286016118ae565b9150509250929050565b6119098161188f565b82525050565b5f6020820190506119225f830184611900565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61195c81611928565b8114611966575f80fd5b50565b5f8135905061197781611953565b92915050565b5f602082840312156119925761199161182d565b5b5f61199f84828501611969565b91505092915050565b5f8115159050919050565b6119bc816119a8565b82525050565b5f6020820190506119d55f8301846119b3565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611a29826119e3565b810181811067ffffffffffffffff82111715611a4857611a476119f3565b5b80604052505050565b5f611a5a611824565b9050611a668282611a20565b919050565b5f67ffffffffffffffff821115611a8557611a846119f3565b5b611a8e826119e3565b9050602081019050919050565b828183375f83830152505050565b5f611abb611ab684611a6b565b611a51565b905082815260208101848484011115611ad757611ad66119df565b5b611ae2848285611a9b565b509392505050565b5f82601f830112611afe57611afd6119db565b5b8135611b0e848260208601611aa9565b91505092915050565b5f60208284031215611b2c57611b2b61182d565b5b5f82013567ffffffffffffffff811115611b4957611b48611831565b5b611b5584828501611aea565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f611b9082611b5e565b611b9a8185611b68565b9350611baa818560208601611b78565b611bb3816119e3565b840191505092915050565b5f6020820190508181035f830152611bd68184611b86565b905092915050565b5f60208284031215611bf357611bf261182d565b5b5f611c00848285016118ae565b91505092915050565b5f67ffffffffffffffff821115611c2357611c226119f3565b5b602082029050602081019050919050565b5f80fd5b5f611c4a611c4584611c09565b611a51565b90508083825260208201905060208402830185811115611c6d57611c6c611c34565b5b835b81811015611c965780611c8288826118ae565b845260208401935050602081019050611c6f565b5050509392505050565b5f82601f830112611cb457611cb36119db565b5b8135611cc4848260208601611c38565b91505092915050565b5f67ffffffffffffffff821115611ce757611ce66119f3565b5b611cf0826119e3565b9050602081019050919050565b5f611d0f611d0a84611ccd565b611a51565b905082815260208101848484011115611d2b57611d2a6119df565b5b611d36848285611a9b565b509392505050565b5f82601f830112611d5257611d516119db565b5b8135611d62848260208601611cfd565b91505092915050565b5f805f805f60a08688031215611d8457611d8361182d565b5b5f611d918882890161187b565b9550506020611da28882890161187b565b945050604086013567ffffffffffffffff811115611dc357611dc2611831565b5b611dcf88828901611ca0565b935050606086013567ffffffffffffffff811115611df057611def611831565b5b611dfc88828901611ca0565b925050608086013567ffffffffffffffff811115611e1d57611e1c611831565b5b611e2988828901611d3e565b9150509295509295909350565b5f80fd5b5f8083601f840112611e4f57611e4e6119db565b5b8235905067ffffffffffffffff811115611e6c57611e6b611e36565b5b602083019150836020820283011115611e8857611e87611c34565b5b9250929050565b5f8060208385031215611ea557611ea461182d565b5b5f83013567ffffffffffffffff811115611ec257611ec1611831565b5b611ece85828601611e3a565b92509250509250929050565b5f67ffffffffffffffff821115611ef457611ef36119f3565b5b602082029050602081019050919050565b5f611f17611f1284611eda565b611a51565b90508083825260208201905060208402830185811115611f3a57611f39611c34565b5b835b81811015611f635780611f4f888261187b565b845260208401935050602081019050611f3c565b5050509392505050565b5f82601f830112611f8157611f806119db565b5b8135611f91848260208601611f05565b91505092915050565b5f8060408385031215611fb057611faf61182d565b5b5f83013567ffffffffffffffff811115611fcd57611fcc611831565b5b611fd985828601611f6d565b925050602083013567ffffffffffffffff811115611ffa57611ff9611831565b5b61200685828601611ca0565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6120428161188f565b82525050565b5f6120538383612039565b60208301905092915050565b5f602082019050919050565b5f61207582612010565b61207f818561201a565b935061208a8361202a565b805f5b838110156120ba5781516120a18882612048565b97506120ac8361205f565b92505060018101905061208d565b5085935050505092915050565b5f6020820190508181035f8301526120df818461206b565b905092915050565b6120f081611854565b82525050565b5f6020820190506121095f8301846120e7565b92915050565b612118816119a8565b8114612122575f80fd5b50565b5f813590506121338161210f565b92915050565b5f806040838503121561214f5761214e61182d565b5b5f61215c8582860161187b565b925050602061216d85828601612125565b9150509250929050565b5f806040838503121561218d5761218c61182d565b5b5f61219a8582860161187b565b92505060206121ab8582860161187b565b9150509250929050565b5f805f805f60a086880312156121ce576121cd61182d565b5b5f6121db8882890161187b565b95505060206121ec8882890161187b565b94505060406121fd888289016118ae565b935050606061220e888289016118ae565b925050608086013567ffffffffffffffff81111561222f5761222e611831565b5b61223b88828901611d3e565b9150509295509295909350565b5f6020828403121561225d5761225c61182d565b5b5f61226a8482850161187b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806122b757607f821691505b6020821081036122ca576122c9612273565b5b50919050565b5f6040820190506122e35f8301856120e7565b6122f060208301846120e7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f61235061234b61234684612324565b61232d565b61188f565b9050919050565b61236081612336565b82525050565b5f819050919050565b5f61238961238461237f84612366565b61232d565b61188f565b9050919050565b6123998161236f565b82525050565b5f6040820190506123b25f830185612357565b6123bf6020830184612390565b9392505050565b5f6040820190506123d95f830185611900565b6123e66020830184611900565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026124497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261240e565b612453868361240e565b95508019841693508086168417925050509392505050565b5f61248561248061247b8461188f565b61232d565b61188f565b9050919050565b5f819050919050565b61249e8361246b565b6124b26124aa8261248c565b84845461241a565b825550505050565b5f90565b6124c66124ba565b6124d1818484612495565b505050565b5b818110156124f4576124e95f826124be565b6001810190506124d7565b5050565b601f8211156125395761250a816123ed565b612513846123ff565b81016020851015612522578190505b61253661252e856123ff565b8301826124d6565b50505b505050565b5f82821c905092915050565b5f6125595f198460080261253e565b1980831691505092915050565b5f612571838361254a565b9150826002028217905092915050565b61258a82611b5e565b67ffffffffffffffff8111156125a3576125a26119f3565b5b6125ad82546122a0565b6125b88282856124f8565b5f60209050601f8311600181146125e9575f84156125d7578287015190505b6125e18582612566565b865550612648565b601f1984166125f7866123ed565b5f5b8281101561261e578489015182556001820191506020850194506020810190506125f9565b8683101561263b5784890151612637601f89168261254a565b8355505b6001600288020188555050505b505050505050565b5f6080820190506126635f8301876120e7565b6126706020830186611900565b61267d6040830185611900565b61268a6060830184611900565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126ca8261188f565b91506126d58361188f565b92508282019050808211156126ed576126ec612693565b5b92915050565b5f6040820190508181035f83015261270b818561206b565b9050818103602083015261271f818461206b565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61274c82612728565b6127568185612732565b9350612766818560208601611b78565b61276f816119e3565b840191505092915050565b5f60a08201905061278d5f8301886120e7565b61279a60208301876120e7565b6127a76040830186611900565b6127b46060830185611900565b81810360808301526127c68184612742565b90509695505050505050565b5f815190506127e081611953565b92915050565b5f602082840312156127fb576127fa61182d565b5b5f612808848285016127d2565b91505092915050565b5f60a0820190506128245f8301886120e7565b61283160208301876120e7565b8181036040830152612843818661206b565b90508181036060830152612857818561206b565b9050818103608083015261286b8184612742565b9050969550505050505056fea2646970667358221220183925bbf30adad50a5561bd09fc12ebc6db1323c8f3ebd9a143b8619a52c69c64736f6c634300081a003368747470733a2f2f6261666b726569673533653636656769626835356376626a6b677568723365676336777237706f35356178757677697237676c77736f64707761652e697066732e666c6b2d697066732e78797a4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a