60806040526000600760146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200268238038062002682833981810160405281019062000052919062000676565b338383816003908162000066919062000967565b50806004908162000078919062000967565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000f05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000e7919062000a93565b60405180910390fd5b62000101816200012560201b60201c565b50620001143385620001eb60201b60201c565b806008819055505050505062000b85565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002605760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000257919062000a93565b60405180910390fd5b62000274600083836200027860201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620002ce578060026000828254620002c1919062000adf565b92505081905550620003a4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200035d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003549392919062000b2b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003ef57806002600082825403925050819055506200043c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200049b919062000b68565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620004d181620004bc565b8114620004dd57600080fd5b50565b600081519050620004f181620004c6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200054c8262000501565b810181811067ffffffffffffffff821117156200056e576200056d62000512565b5b80604052505050565b600062000583620004a8565b905062000591828262000541565b919050565b600067ffffffffffffffff821115620005b457620005b362000512565b5b620005bf8262000501565b9050602081019050919050565b60005b83811015620005ec578082015181840152602081019050620005cf565b60008484015250505050565b60006200060f620006098462000596565b62000577565b9050828152602081018484840111156200062e576200062d620004fc565b5b6200063b848285620005cc565b509392505050565b600082601f8301126200065b576200065a620004f7565b5b81516200066d848260208601620005f8565b91505092915050565b60008060008060808587031215620006935762000692620004b2565b5b6000620006a387828801620004e0565b945050602085015167ffffffffffffffff811115620006c757620006c6620004b7565b5b620006d58782880162000643565b935050604085015167ffffffffffffffff811115620006f957620006f8620004b7565b5b620007078782880162000643565b92505060606200071a87828801620004e0565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200077957607f821691505b6020821081036200078f576200078e62000731565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007ba565b620008058683620007ba565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000848620008426200083c84620004bc565b6200081d565b620004bc565b9050919050565b6000819050919050565b620008648362000827565b6200087c62000873826200084f565b848454620007c7565b825550505050565b600090565b6200089362000884565b620008a081848462000859565b505050565b5b81811015620008c857620008bc60008262000889565b600181019050620008a6565b5050565b601f8211156200091757620008e18162000795565b620008ec84620007aa565b81016020851015620008fc578190505b620009146200090b85620007aa565b830182620008a5565b50505b505050565b600082821c905092915050565b60006200093c600019846008026200091c565b1980831691505092915050565b600062000957838362000929565b9150826002028217905092915050565b620009728262000726565b67ffffffffffffffff8111156200098e576200098d62000512565b5b6200099a825462000760565b620009a7828285620008cc565b600060209050601f831160018114620009df5760008415620009ca578287015190505b620009d6858262000949565b86555062000a46565b601f198416620009ef8662000795565b60005b8281101562000a1957848901518255600182019150602085019450602081019050620009f2565b8683101562000a39578489015162000a35601f89168262000929565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a7b8262000a4e565b9050919050565b62000a8d8162000a6e565b82525050565b600060208201905062000aaa600083018462000a82565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aec82620004bc565b915062000af983620004bc565b925082820190508082111562000b145762000b1362000ab0565b5b92915050565b62000b2581620004bc565b82525050565b600060608201905062000b42600083018662000a82565b62000b51602083018562000b1a565b62000b60604083018462000b1a565b949350505050565b600060208201905062000b7f600083018462000b1a565b92915050565b611aed8062000b956000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806387d17fbe116100ad578063a9059cbb11610071578063a9059cbb146102fb578063b0cd8ba11461032b578063be107e9414610349578063dd62ed3e14610365578063f2fde38b146103955761012c565b806387d17fbe1461027b5780638da5cb5b1461029957806395d89b41146102b7578063a1448194146102d5578063a56fa76c146102f15761012c565b806342966c68116100f457806342966c68146101eb5780636f3ed9d71461020757806370a0823114610225578063715018a61461025557806379cc67901461025f5761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103b1565b60405161014691906115ba565b60405180910390f35b61016960048036038101906101649190611675565b610443565b60405161017691906116d0565b60405180910390f35b610187610466565b60405161019491906116fa565b60405180910390f35b6101b760048036038101906101b29190611715565b610470565b6040516101c491906116d0565b60405180910390f35b6101d561051c565b6040516101e29190611784565b60405180910390f35b6102056004803603810190610200919061179f565b610521565b005b61020f610535565b60405161021c91906116fa565b60405180910390f35b61023f600480360381019061023a91906117cc565b61053f565b60405161024c91906116fa565b60405180910390f35b61025d610587565b005b61027960048036038101906102749190611675565b61059b565b005b6102836105bb565b6040516102909190611808565b60405180910390f35b6102a16105e5565b6040516102ae9190611808565b60405180910390f35b6102bf61060f565b6040516102cc91906115ba565b60405180910390f35b6102ef60048036038101906102ea9190611675565b6106a1565b005b6102f961086f565b005b61031560048036038101906103109190611675565b610894565b60405161032291906116d0565b60405180910390f35b610333610b6a565b60405161034091906116d0565b60405180910390f35b610363600480360381019061035e91906117cc565b610b81565b005b61037f600480360381019061037a9190611823565b610c5e565b60405161038c91906116fa565b60405180910390f35b6103af60048036038101906103aa91906117cc565b610ce5565b005b6060600380546103c090611892565b80601f01602080910402602001604051908101604052809291908181526020018280546103ec90611892565b80156104395780601f1061040e57610100808354040283529160200191610439565b820191906000526020600020905b81548152906001019060200180831161041c57829003601f168201915b5050505050905090565b60008061044e610d6b565b905061045b818585610d73565b600191505092915050565b6000600254905090565b600061047a610d85565b600760149054906101000a900460ff16156104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c19061190f565b60405180910390fd5b60006104d7858585610e0c565b90506104f5856104e56105e5565b6104ee8861053f565b6000610e3b565b610511846105016105e5565b61050a8761053f565b6000610e3b565b809150509392505050565b600090565b61053261052c610d6b565b82611012565b50565b6000600854905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61058f610d85565b6105996000611094565b565b6105ad826105a7610d6b565b8361115a565b6105b78282611012565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461061e90611892565b80601f016020809104026020016040519081016040528092919081815260200182805461064a90611892565b80156106975780601f1061066c57610100808354040283529160200191610697565b820191906000526020600020905b81548152906001019060200180831161067a57829003601f168201915b5050505050905090565b6106a9610d85565b600760149054906101000a900460ff16156106f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f09061190f565b60405180910390fd5b81600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a826040518263ffffffff1660e01b81526004016107559190611808565b602060405180830381865afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610796919061195b565b806107d357506107a46105e5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610809906119d4565b60405180910390fd5b61081c8383610894565b50610831836108296105e5565b846000610e3b565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688583836040516108629291906119f4565b60405180910390a1505050565b610877610d85565b6001600760146101000a81548160ff021916908315150217905550565b600033600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a826040518263ffffffff1660e01b81526004016108f29190611808565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610933919061195b565b8061097057506109416105e5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906119d4565b60405180910390fd5b83600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a826040518263ffffffff1660e01b8152600401610a0b9190611808565b602060405180830381865afa158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c919061195b565b80610a895750610a5a6105e5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906119d4565b60405180910390fd5b600760149054906101000a900460ff1615610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f9061190f565b60405180910390fd5b6000610b2486866111ee565b9050610b4233610b326105e5565b610b3b3361053f565b6000610e3b565b610b5e86610b4e6105e5565b610b578961053f565b6000610e3b565b80935050505092915050565b6000600760149054906101000a900460ff16905090565b610b89610d85565b600760149054906101000a900460ff1615610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09061190f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ced610d85565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d5f5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610d569190611808565b60405180910390fd5b610d6881611094565b50565b600033905090565b610d808383836001610e3b565b505050565b610d8d610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610dab6105e5565b73ffffffffffffffffffffffffffffffffffffffff1614610e0a57610dce610d6b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e019190611808565b60405180910390fd5b565b600080610e17610d6b565b9050610e2485828561115a565b610e2f858585611211565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ead5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ea49190611808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f1f5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f169190611808565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561100c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161100391906116fa565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110845760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161107b9190611808565b60405180910390fd5b61109082600083611305565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111668484610c5e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111e857818110156111d8578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016111cf93929190611a1d565b60405180910390fd5b6111e784848484036000610e3b565b5b50505050565b6000806111f9610d6b565b9050611206818585611211565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112835760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161127a9190611808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112f55760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016112ec9190611808565b60405180910390fd5b611300838383611305565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361135757806002600082825461134b9190611a83565b9250508190555061142a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113e3578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113da93929190611a1d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147357806002600082825403925050819055506114c0565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161151d91906116fa565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611564578082015181840152602081019050611549565b60008484015250505050565b6000601f19601f8301169050919050565b600061158c8261152a565b6115968185611535565b93506115a6818560208601611546565b6115af81611570565b840191505092915050565b600060208201905081810360008301526115d48184611581565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061160c826115e1565b9050919050565b61161c81611601565b811461162757600080fd5b50565b60008135905061163981611613565b92915050565b6000819050919050565b6116528161163f565b811461165d57600080fd5b50565b60008135905061166f81611649565b92915050565b6000806040838503121561168c5761168b6115dc565b5b600061169a8582860161162a565b92505060206116ab85828601611660565b9150509250929050565b60008115159050919050565b6116ca816116b5565b82525050565b60006020820190506116e560008301846116c1565b92915050565b6116f48161163f565b82525050565b600060208201905061170f60008301846116eb565b92915050565b60008060006060848603121561172e5761172d6115dc565b5b600061173c8682870161162a565b935050602061174d8682870161162a565b925050604061175e86828701611660565b9150509250925092565b600060ff82169050919050565b61177e81611768565b82525050565b60006020820190506117996000830184611775565b92915050565b6000602082840312156117b5576117b46115dc565b5b60006117c384828501611660565b91505092915050565b6000602082840312156117e2576117e16115dc565b5b60006117f08482850161162a565b91505092915050565b61180281611601565b82525050565b600060208201905061181d60008301846117f9565b92915050565b6000806040838503121561183a576118396115dc565b5b60006118488582860161162a565b92505060206118598582860161162a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118aa57607f821691505b6020821081036118bd576118bc611863565b5b50919050565b7f436f6e7472616374206861732065787069726564000000000000000000000000600082015250565b60006118f9601483611535565b9150611904826118c3565b602082019050919050565b60006020820190508181036000830152611928816118ec565b9050919050565b611938816116b5565b811461194357600080fd5b50565b6000815190506119558161192f565b92915050565b600060208284031215611971576119706115dc565b5b600061197f84828501611946565b91505092915050565b7f496e76616c696420416464726573730000000000000000000000000000000000600082015250565b60006119be600f83611535565b91506119c982611988565b602082019050919050565b600060208201905081810360008301526119ed816119b1565b9050919050565b6000604082019050611a0960008301856117f9565b611a1660208301846116eb565b9392505050565b6000606082019050611a3260008301866117f9565b611a3f60208301856116eb565b611a4c60408301846116eb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a8e8261163f565b9150611a998361163f565b9250828201905080821115611ab157611ab0611a54565b5b9291505056fea2646970667358221220d7084a2222fb8566be2a01cc922433e9ed6a5cd74cc1f2ac95e91de63cfb34d064736f6c6343000814003300000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000c3500000000000000000000000000000000000000000000000000000000000000007446169776153540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034453540000000000000000000000000000000000000000000000000000000000