60806040523480156200001157600080fd5b506040518060400160405280600281526020017f4b4b0000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4b4b00000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000453565b508060049081620000a1919062000453565b505050620000c4620000b86200010b60201b60201c565b6200011360201b60201c565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200025b57607f821691505b60208210810362000271576200027062000213565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200029c565b620002e786836200029c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003346200032e6200032884620002ff565b62000309565b620002ff565b9050919050565b6000819050919050565b620003508362000313565b620003686200035f826200033b565b848454620002a9565b825550505050565b600090565b6200037f62000370565b6200038c81848462000345565b505050565b5b81811015620003b457620003a860008262000375565b60018101905062000392565b5050565b601f8211156200040357620003cd8162000277565b620003d8846200028c565b81016020851015620003e8578190505b62000400620003f7856200028c565b83018262000391565b50505b505050565b600082821c905092915050565b6000620004286000198460080262000408565b1980831691505092915050565b600062000443838362000415565b9150826002028217905092915050565b6200045e82620001d9565b67ffffffffffffffff8111156200047a5762000479620001e4565b5b62000486825462000242565b62000493828285620003b8565b600060209050601f831160018114620004cb5760008415620004b6578287015190505b620004c2858262000435565b86555062000532565b601f198416620004db8662000277565b60005b828110156200050557848901518255600182019150602085019450602081019050620004de565b8683101562000525578489015162000521601f89168262000415565b8355505b6001600288020188555050505b505050505050565b611cb7806200054a6000396000f3fe60806040526004361061010d5760003560e01c806370a0823111610095578063a0712d6811610064578063a0712d68146103ef578063a457c2d714610418578063a9059cbb14610455578063dd62ed3e14610492578063f2fde38b146104cf57610189565b806370a0823114610345578063715018a6146103825780638da5cb5b1461039957806395d89b41146103c457610189565b8063313ce567116100dc578063313ce5671461025e57806331f5b0bb1461028957806332cb6b0c146102b457806339509351146102df578063547e3f061461031c57610189565b806306fdde031461018e578063095ea7b3146101b957806318160ddd146101f657806323b872dd1461022157610189565b36610189576000341161011f57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610187573d6000803e3d6000fd5b005b600080fd5b34801561019a57600080fd5b506101a36104f8565b6040516101b09190611367565b60405180910390f35b3480156101c557600080fd5b506101e060048036038101906101db9190611422565b61058a565b6040516101ed919061147d565b60405180910390f35b34801561020257600080fd5b5061020b6105ad565b60405161021891906114a7565b60405180910390f35b34801561022d57600080fd5b50610248600480360381019061024391906114c2565b6105b7565b604051610255919061147d565b60405180910390f35b34801561026a57600080fd5b506102736105e6565b6040516102809190611531565b60405180910390f35b34801561029557600080fd5b5061029e6105ef565b6040516102ab919061155b565b60405180910390f35b3480156102c057600080fd5b506102c9610615565b6040516102d691906114a7565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190611422565b610625565b604051610313919061147d565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611576565b61065c565b005b34801561035157600080fd5b5061036c60048036038101906103679190611576565b61071c565b60405161037991906114a7565b60405180910390f35b34801561038e57600080fd5b50610397610764565b005b3480156103a557600080fd5b506103ae6107ec565b6040516103bb919061155b565b60405180910390f35b3480156103d057600080fd5b506103d9610816565b6040516103e69190611367565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906115a3565b6108a8565b005b34801561042457600080fd5b5061043f600480360381019061043a9190611422565b6109b4565b60405161044c919061147d565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190611422565b610a2b565b604051610489919061147d565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906115d0565b610a4e565b6040516104c691906114a7565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190611576565b610ad5565b005b6060600380546105079061163f565b80601f01602080910402602001604051908101604052809291908181526020018280546105339061163f565b80156105805780601f1061055557610100808354040283529160200191610580565b820191906000526020600020905b81548152906001019060200180831161056357829003601f168201915b5050505050905090565b600080610595610bcc565b90506105a2818585610bd4565b600191505092915050565b6000600254905090565b6000806105c2610bcc565b90506105cf858285610d9d565b6105da858585610e29565b60019150509392505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6b0311d253316c79d37600000081565b600080610630610bcc565b90506106518185856106428589610a4e565b61064c919061169f565b610bd4565b600191505092915050565b610664610bcc565b73ffffffffffffffffffffffffffffffffffffffff166106826107ec565b73ffffffffffffffffffffffffffffffffffffffff16146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf9061171f565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61076c610bcc565b73ffffffffffffffffffffffffffffffffffffffff1661078a6107ec565b73ffffffffffffffffffffffffffffffffffffffff16146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d79061171f565b60405180910390fd5b6107ea60006110a8565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108259061163f565b80601f01602080910402602001604051908101604052809291908181526020018280546108519061163f565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b6108b0610bcc565b73ffffffffffffffffffffffffffffffffffffffff166108ce6107ec565b73ffffffffffffffffffffffffffffffffffffffff1614610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b9061171f565b60405180910390fd5b6b0311d253316c79d3760000008161093a6105ad565b610944919061169f565b1115610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c9061178b565b60405180910390fd5b6109b1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261116e565b50565b6000806109bf610bcc565b905060006109cd8286610a4e565b905083811015610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061181d565b60405180910390fd5b610a1f8286868403610bd4565b60019250505092915050565b600080610a36610bcc565b9050610a43818585610e29565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610add610bcc565b73ffffffffffffffffffffffffffffffffffffffff16610afb6107ec565b73ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b489061171f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb7906118af565b60405180910390fd5b610bc9816110a8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90611941565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906119d3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d9091906114a7565b60405180910390a3505050565b6000610da98484610a4e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e235781811015610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90611a3f565b60405180910390fd5b610e228484848403610bd4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90611ad1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90611b63565b60405180910390fd5b610f128383836112cd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90611bf5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461102b919061169f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108f91906114a7565b60405180910390a36110a28484846112d2565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490611c61565b60405180910390fd5b6111e9600083836112cd565b80600260008282546111fb919061169f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611250919061169f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112b591906114a7565b60405180910390a36112c9600083836112d2565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113115780820151818401526020810190506112f6565b60008484015250505050565b6000601f19601f8301169050919050565b6000611339826112d7565b61134381856112e2565b93506113538185602086016112f3565b61135c8161131d565b840191505092915050565b60006020820190508181036000830152611381818461132e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113b98261138e565b9050919050565b6113c9816113ae565b81146113d457600080fd5b50565b6000813590506113e6816113c0565b92915050565b6000819050919050565b6113ff816113ec565b811461140a57600080fd5b50565b60008135905061141c816113f6565b92915050565b6000806040838503121561143957611438611389565b5b6000611447858286016113d7565b92505060206114588582860161140d565b9150509250929050565b60008115159050919050565b61147781611462565b82525050565b6000602082019050611492600083018461146e565b92915050565b6114a1816113ec565b82525050565b60006020820190506114bc6000830184611498565b92915050565b6000806000606084860312156114db576114da611389565b5b60006114e9868287016113d7565b93505060206114fa868287016113d7565b925050604061150b8682870161140d565b9150509250925092565b600060ff82169050919050565b61152b81611515565b82525050565b60006020820190506115466000830184611522565b92915050565b611555816113ae565b82525050565b6000602082019050611570600083018461154c565b92915050565b60006020828403121561158c5761158b611389565b5b600061159a848285016113d7565b91505092915050565b6000602082840312156115b9576115b8611389565b5b60006115c78482850161140d565b91505092915050565b600080604083850312156115e7576115e6611389565b5b60006115f5858286016113d7565b9250506020611606858286016113d7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061165757607f821691505b60208210810361166a57611669611610565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116aa826113ec565b91506116b5836113ec565b92508282019050808211156116cd576116cc611670565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006117096020836112e2565b9150611714826116d3565b602082019050919050565b60006020820190508181036000830152611738816116fc565b9050919050565b7f4d617820537570706c7900000000000000000000000000000000000000000000600082015250565b6000611775600a836112e2565b91506117808261173f565b602082019050919050565b600060208201905081810360008301526117a481611768565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006118076025836112e2565b9150611812826117ab565b604082019050919050565b60006020820190508181036000830152611836816117fa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006118996026836112e2565b91506118a48261183d565b604082019050919050565b600060208201905081810360008301526118c88161188c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061192b6024836112e2565b9150611936826118cf565b604082019050919050565b6000602082019050818103600083015261195a8161191e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006119bd6022836112e2565b91506119c882611961565b604082019050919050565b600060208201905081810360008301526119ec816119b0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611a29601d836112e2565b9150611a34826119f3565b602082019050919050565b60006020820190508181036000830152611a5881611a1c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611abb6025836112e2565b9150611ac682611a5f565b604082019050919050565b60006020820190508181036000830152611aea81611aae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b4d6023836112e2565b9150611b5882611af1565b604082019050919050565b60006020820190508181036000830152611b7c81611b40565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611bdf6026836112e2565b9150611bea82611b83565b604082019050919050565b60006020820190508181036000830152611c0e81611bd2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611c4b601f836112e2565b9150611c5682611c15565b602082019050919050565b60006020820190508181036000830152611c7a81611c3e565b905091905056fea264697066735822122018744474363a6033c8d587767ea0cc062a79432e43bb602b6c182177ff9dc41764736f6c63430008120033