60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600f81526020017f536869626120496e7520546f6b656e0000000000000000000000000000000000815250600390816200009891906200042b565b506040518060400160405280600481526020017f534849420000000000000000000000000000000000000000000000000000000081525060049081620000df91906200042b565b506012600560006101000a81548160ff021916908360ff16021790555069d3c21bcecceda1000000600681905550600654600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000512565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023357607f821691505b602082108103620002495762000248620001eb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002b37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000274565b620002bf868362000274565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200030c620003066200030084620002d7565b620002e1565b620002d7565b9050919050565b6000819050919050565b6200032883620002eb565b62000340620003378262000313565b84845462000281565b825550505050565b600090565b6200035762000348565b620003648184846200031d565b505050565b5b818110156200038c57620003806000826200034d565b6001810190506200036a565b5050565b601f821115620003db57620003a5816200024f565b620003b08462000264565b81016020851015620003c0578190505b620003d8620003cf8562000264565b83018262000369565b50505b505050565b600082821c905092915050565b60006200040060001984600802620003e0565b1980831691505092915050565b60006200041b8383620003ed565b9150826002028217905092915050565b6200043682620001b1565b67ffffffffffffffff811115620004525762000451620001bc565b5b6200045e82546200021a565b6200046b82828562000390565b600060209050601f831160018114620004a357600084156200048e578287015190505b6200049a85826200040d565b8655506200050a565b601f198416620004b3866200024f565b60005b82811015620004dd57848901518255600182019150602085019450602081019050620004b6565b86831015620004fd5784890151620004f9601f891682620003ed565b8355505b6001600288020188555050505b505050505050565b611bb380620005226000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063ade2de0211610097578063e2daf66511610071578063e2daf66514610532578063e9543fa214610550578063f2fde38b14610580578063ff9913e81461059c576101a9565b8063ade2de02146104b4578063d21c8d55146104e4578063dd62ed3e14610502576101a9565b8063891e1ee0116100d3578063891e1ee01461042a5780638da5cb5b1461044857806395d89b4114610466578063a9059cbb14610484576101a9565b806370a08231146103ae578063791f83eb146103de578063858ced35146103fa576101a9565b8063313ce5671161016657806340c10f191161014057806340c10f19146103165780634a0af68d1461033257806355eff2f6146103625780635c6581651461037e576101a9565b8063313ce567146102985780633177029f146102b6578063376d567c146102e6576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806311de19e7146101fc57806318160ddd1461021a57806323b872dd1461023857806327e235e314610268575b600080fd5b6101b66105cc565b6040516101c39190611745565b60405180910390f35b6101e660048036038101906101e19190611800565b61065a565b6040516101f3919061185b565b60405180910390f35b61020461074c565b6040516102119190611885565b60405180910390f35b610222610772565b60405161022f91906118af565b60405180910390f35b610252600480360381019061024d91906118ca565b610778565b60405161025f919061185b565b60405180910390f35b610282600480360381019061027d919061191d565b610b8d565b60405161028f91906118af565b60405180910390f35b6102a0610ba5565b6040516102ad9190611966565b60405180910390f35b6102d060048036038101906102cb9190611800565b610bb8565b6040516102dd919061185b565b60405180910390f35b61030060048036038101906102fb919061191d565b610c6c565b60405161030d919061185b565b60405180910390f35b610330600480360381019061032b9190611800565b610d12565b005b61034c6004803603810190610347919061191d565b610db2565b604051610359919061185b565b60405180910390f35b61037c600480360381019061037791906119ad565b610e58565b005b610398600480360381019061039391906119ed565b610f0b565b6040516103a591906118af565b60405180910390f35b6103c860048036038101906103c3919061191d565b610f30565b6040516103d591906118af565b60405180910390f35b6103f860048036038101906103f391906119ad565b610f79565b005b610414600480360381019061040f919061191d565b61102e565b604051610421919061185b565b60405180910390f35b6104326110d4565b60405161043f9190611885565b60405180910390f35b6104506110fa565b60405161045d9190611885565b60405180910390f35b61046e61111e565b60405161047b9190611745565b60405180910390f35b61049e60048036038101906104999190611800565b6111ac565b6040516104ab919061185b565b60405180910390f35b6104ce60048036038101906104c9919061191d565b6113cb565b6040516104db919061185b565b60405180910390f35b6104ec611417565b6040516104f99190611885565b60405180910390f35b61051c600480360381019061051791906119ed565b61143d565b60405161052991906118af565b60405180910390f35b61053a6114c4565b6040516105479190611885565b60405180910390f35b61056a6004803603810190610565919061191d565b6114ea565b6040516105779190611a3c565b60405180910390f35b61059a6004803603810190610595919061191d565b6114f4565b005b6105b660048036038101906105b1919061191d565b611642565b6040516105c3919061185b565b60405180910390f35b600380546105d990611a86565b80601f016020809104026020016040519081016040528092919081815260200182805461060590611a86565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b505050505081565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161073a91906118af565b60405180910390a36001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107b257600080fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156107fe57600080fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561088757600080fd5b60011515600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108e457600080fd5b61093682600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166290919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109cb82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168990919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a9d82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166290919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b7a91906118af565b60405180910390a3600190509392505050565b60096020528060005260406000206000915090505481565b600560009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1457600080fd5b6000821115610c625781600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc857600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6a57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0e57600080fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb057600080fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b602052816000526040600020602052806000526040600020600091509150505481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd357600080fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108a57600080fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004805461112b90611a86565b80601f016020809104026020016040519081016040528092919081815260200182805461115790611a86565b80156111a45780601f10611179576101008083540402835291602001916111a4565b820191906000526020600020905b81548152906001019060200180831161118757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e657600080fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561123257600080fd5b61128482600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166290919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061131982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168990919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113b991906118af565b60405180910390a36001905092915050565b600081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000819050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461154c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361158557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008282111561167557611674611ab7565b5b81836116819190611b15565b905092915050565b60008082846116989190611b49565b9050838110156116ab576116aa611ab7565b5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116ef5780820151818401526020810190506116d4565b60008484015250505050565b6000601f19601f8301169050919050565b6000611717826116b5565b61172181856116c0565b93506117318185602086016116d1565b61173a816116fb565b840191505092915050565b6000602082019050818103600083015261175f818461170c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117978261176c565b9050919050565b6117a78161178c565b81146117b257600080fd5b50565b6000813590506117c48161179e565b92915050565b6000819050919050565b6117dd816117ca565b81146117e857600080fd5b50565b6000813590506117fa816117d4565b92915050565b6000806040838503121561181757611816611767565b5b6000611825858286016117b5565b9250506020611836858286016117eb565b9150509250929050565b60008115159050919050565b61185581611840565b82525050565b6000602082019050611870600083018461184c565b92915050565b61187f8161178c565b82525050565b600060208201905061189a6000830184611876565b92915050565b6118a9816117ca565b82525050565b60006020820190506118c460008301846118a0565b92915050565b6000806000606084860312156118e3576118e2611767565b5b60006118f1868287016117b5565b9350506020611902868287016117b5565b9250506040611913868287016117eb565b9150509250925092565b60006020828403121561193357611932611767565b5b6000611941848285016117b5565b91505092915050565b600060ff82169050919050565b6119608161194a565b82525050565b600060208201905061197b6000830184611957565b92915050565b61198a81611840565b811461199557600080fd5b50565b6000813590506119a781611981565b92915050565b600080604083850312156119c4576119c3611767565b5b60006119d2858286016117b5565b92505060206119e385828601611998565b9150509250929050565b60008060408385031215611a0457611a03611767565b5b6000611a12858286016117b5565b9250506020611a23858286016117b5565b9150509250929050565b611a368161176c565b82525050565b6000602082019050611a516000830184611a2d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a9e57607f821691505b602082108103611ab157611ab0611a57565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b20826117ca565b9150611b2b836117ca565b9250828203905081811115611b4357611b42611ae6565b5b92915050565b6000611b54826117ca565b9150611b5f836117ca565b9250828201905080821115611b7757611b76611ae6565b5b9291505056fea264697066735822122027e955d8d214e13f46225e8b122d1af7a20e6768489f5c2d83e641b9289ca49064736f6c63430008130033