60806040526000600460156101000a81548160ff0219169083151502179055506000600460166101000a81548160ff0219169083151502179055503480156200004757600080fd5b5060006200005a6200020660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506009600a620001089190620003a8565b620f4240620001189190620003f9565b600160006200012c6200020660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200017a6200020660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a620001d99190620003a8565b620f4240620001e99190620003f9565b604051620001f8919062000455565b60405180910390a362000472565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200029c578086048111156200027457620002736200020e565b5b6001851615620002845780820291505b808102905062000294856200023d565b945062000254565b94509492505050565b600082620002b757600190506200038a565b81620002c757600090506200038a565b8160018114620002e05760028114620002eb5762000321565b60019150506200038a565b60ff8411156200030057620002ff6200020e565b5b8360020a9150848211156200031a57620003196200020e565b5b506200038a565b5060208310610133831016604e8410600b84101617156200035b5782820a9050838111156200035557620003546200020e565b5b6200038a565b6200036a84848460016200024a565b925090508184048111156200038457620003836200020e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620003b58262000391565b9150620003c2836200039b565b9250620003f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002a5565b905092915050565b6000620004068262000391565b9150620004138362000391565b9250828202620004238162000391565b915082820484148315176200043d576200043c6200020e565b5b5092915050565b6200044f8162000391565b82525050565b60006020820190506200046c600083018462000444565b92915050565b6123da80620004826000396000f3fe6080604052600436106100e15760003560e01c806370a082311161007f57806395d89b411161005957806395d89b4114610295578063a28a4d86146102c0578063a9059cbb146102d7578063dd62ed3e14610314576100e8565b806370a0823114610216578063715018a6146102535780638da5cb5b1461026a576100e8565b806323b872dd116100bb57806323b872dd14610180578063313ce567146101bd5780633ccfd60b146101e857806351bc3c85146101ff576100e8565b806306fdde03146100ed578063095ea7b31461011857806318160ddd14610155576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610102610351565b60405161010f91906116ae565b60405180910390f35b34801561012457600080fd5b5061013f600480360381019061013a9190611769565b61038e565b60405161014c91906117c4565b60405180910390f35b34801561016157600080fd5b5061016a6103ac565b60405161017791906117ee565b60405180910390f35b34801561018c57600080fd5b506101a760048036038101906101a29190611809565b6103cf565b6040516101b491906117c4565b60405180910390f35b3480156101c957600080fd5b506101d26104a8565b6040516101df9190611878565b60405180910390f35b3480156101f457600080fd5b506101fd6104b1565b005b34801561020b57600080fd5b50610214610596565b005b34801561022257600080fd5b5061023d60048036038101906102389190611893565b610635565b60405161024a91906117ee565b60405180910390f35b34801561025f57600080fd5b5061026861067e565b005b34801561027657600080fd5b5061027f6107d1565b60405161028c91906118cf565b60405180910390f35b3480156102a157600080fd5b506102aa6107fa565b6040516102b791906116ae565b60405180910390f35b3480156102cc57600080fd5b506102d5610837565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190611769565b610d6e565b60405161030b91906117c4565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906118ea565b610d8c565b60405161034891906117ee565b60405180910390f35b60606040518060400160405280600d81526020017f466f726b2074686520506f726b00000000000000000000000000000000000000815250905090565b60006103a261039b610e13565b8484610e1b565b6001905092915050565b60006009600a6103bc9190611a8c565b620f42406103ca9190611ad7565b905090565b60006103dc848484610fe4565b61049d846103e8610e13565b6104988560405180606001604052806028815260200161237d60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061044e610e13565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112999092919063ffffffff16565b610e1b565b600190509392505050565b60006009905090565b6104b9610e13565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053d90611b65565b60405180910390fd5b61054e6107d1565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610593573d6000803e3d6000fd5b50565b61059e6107d1565b73ffffffffffffffffffffffffffffffffffffffff166105bc610e13565b73ffffffffffffffffffffffffffffffffffffffff1614610612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060990611bd1565b60405180910390fd5b600061061d30610635565b9050600081111561063257610631816112fd565b5b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610686610e13565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f46504f524b000000000000000000000000000000000000000000000000000000815250905090565b61083f610e13565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c390611b65565b60405180910390fd5b600460149054906101000a900460ff161561091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390611c3d565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109b930600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a6109a69190611a8c565b620f42406109b49190611ad7565b610e1b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a9190611c72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190611c72565b6040518363ffffffff1660e01b8152600401610b14929190611c9f565b6020604051808303816000875af1158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b579190611c72565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610be030610635565b600080610beb6107d1565b426040518863ffffffff1660e01b8152600401610c0d96959493929190611d0d565b60606040518083038185885af1158015610c2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c509190611d83565b505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610cf2929190611dd6565b6020604051808303816000875af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611e2b565b506001600460166101000a81548160ff0219169083151502179055506001600460146101000a81548160ff021916908315150217905550565b6000610d82610d7b610e13565b8484610fe4565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190611eca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090611f5c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fd791906117ee565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90611fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612080565b60405180910390fd5b60008111611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612112565b60405180910390fd5b61115781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461157690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111ec81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115c090919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161128c91906117ee565b60405180910390a3505050565b60008383111582906112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d891906116ae565b60405180910390fd5b50600083856112f09190612132565b9050809150509392505050565b6001600460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561133557611334612166565b5b6040519080825280602002602001820160405280156113635781602001602082028036833780820191505090505b509050308160008151811061137b5761137a612195565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190611c72565b8160018151811061145a57611459612195565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506114c130600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e1b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611525959493929190612282565b600060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b50505050506000600460156101000a81548160ff02191690831515021790555050565b60006115b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611299565b905092915050565b60008082846115cf91906122dc565b905083811015611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b9061235c565b60405180910390fd5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561165857808201518184015260208101905061163d565b60008484015250505050565b6000601f19601f8301169050919050565b60006116808261161e565b61168a8185611629565b935061169a81856020860161163a565b6116a381611664565b840191505092915050565b600060208201905081810360008301526116c88184611675565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611700826116d5565b9050919050565b611710816116f5565b811461171b57600080fd5b50565b60008135905061172d81611707565b92915050565b6000819050919050565b61174681611733565b811461175157600080fd5b50565b6000813590506117638161173d565b92915050565b600080604083850312156117805761177f6116d0565b5b600061178e8582860161171e565b925050602061179f85828601611754565b9150509250929050565b60008115159050919050565b6117be816117a9565b82525050565b60006020820190506117d960008301846117b5565b92915050565b6117e881611733565b82525050565b600060208201905061180360008301846117df565b92915050565b600080600060608486031215611822576118216116d0565b5b60006118308682870161171e565b93505060206118418682870161171e565b925050604061185286828701611754565b9150509250925092565b600060ff82169050919050565b6118728161185c565b82525050565b600060208201905061188d6000830184611869565b92915050565b6000602082840312156118a9576118a86116d0565b5b60006118b78482850161171e565b91505092915050565b6118c9816116f5565b82525050565b60006020820190506118e460008301846118c0565b92915050565b60008060408385031215611901576119006116d0565b5b600061190f8582860161171e565b92505060206119208582860161171e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156119b05780860481111561198c5761198b61192a565b5b600185161561199b5780820291505b80810290506119a985611959565b9450611970565b94509492505050565b6000826119c95760019050611a85565b816119d75760009050611a85565b81600181146119ed57600281146119f757611a26565b6001915050611a85565b60ff841115611a0957611a0861192a565b5b8360020a915084821115611a2057611a1f61192a565b5b50611a85565b5060208310610133831016604e8410600b8410161715611a5b5782820a905083811115611a5657611a5561192a565b5b611a85565b611a688484846001611966565b92509050818404811115611a7f57611a7e61192a565b5b81810290505b9392505050565b6000611a9782611733565b9150611aa28361185c565b9250611acf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119b9565b905092915050565b6000611ae282611733565b9150611aed83611733565b9250828202611afb81611733565b91508282048414831517611b1257611b1161192a565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611b4f602083611629565b9150611b5a82611b19565b602082019050919050565b60006020820190508181036000830152611b7e81611b42565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000611bbb601783611629565b9150611bc682611b85565b602082019050919050565b60006020820190508181036000830152611bea81611bae565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000611c27601783611629565b9150611c3282611bf1565b602082019050919050565b60006020820190508181036000830152611c5681611c1a565b9050919050565b600081519050611c6c81611707565b92915050565b600060208284031215611c8857611c876116d0565b5b6000611c9684828501611c5d565b91505092915050565b6000604082019050611cb460008301856118c0565b611cc160208301846118c0565b9392505050565b6000819050919050565b6000819050919050565b6000611cf7611cf2611ced84611cc8565b611cd2565b611733565b9050919050565b611d0781611cdc565b82525050565b600060c082019050611d2260008301896118c0565b611d2f60208301886117df565b611d3c6040830187611cfe565b611d496060830186611cfe565b611d5660808301856118c0565b611d6360a08301846117df565b979650505050505050565b600081519050611d7d8161173d565b92915050565b600080600060608486031215611d9c57611d9b6116d0565b5b6000611daa86828701611d6e565b9350506020611dbb86828701611d6e565b9250506040611dcc86828701611d6e565b9150509250925092565b6000604082019050611deb60008301856118c0565b611df860208301846117df565b9392505050565b611e08816117a9565b8114611e1357600080fd5b50565b600081519050611e2581611dff565b92915050565b600060208284031215611e4157611e406116d0565b5b6000611e4f84828501611e16565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611eb4602483611629565b9150611ebf82611e58565b604082019050919050565b60006020820190508181036000830152611ee381611ea7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f46602283611629565b9150611f5182611eea565b604082019050919050565b60006020820190508181036000830152611f7581611f39565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611fd8602583611629565b9150611fe382611f7c565b604082019050919050565b6000602082019050818103600083015261200781611fcb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061206a602383611629565b91506120758261200e565b604082019050919050565b600060208201905081810360008301526120998161205d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006120fc602983611629565b9150612107826120a0565b604082019050919050565b6000602082019050818103600083015261212b816120ef565b9050919050565b600061213d82611733565b915061214883611733565b92508282039050818111156121605761215f61192a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6121f9816116f5565b82525050565b600061220b83836121f0565b60208301905092915050565b6000602082019050919050565b600061222f826121c4565b61223981856121cf565b9350612244836121e0565b8060005b8381101561227557815161225c88826121ff565b975061226783612217565b925050600181019050612248565b5085935050505092915050565b600060a08201905061229760008301886117df565b6122a46020830187611cfe565b81810360408301526122b68186612224565b90506122c560608301856118c0565b6122d260808301846117df565b9695505050505050565b60006122e782611733565b91506122f283611733565b925082820190508082111561230a5761230961192a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612346601b83611629565b915061235182612310565b602082019050919050565b6000602082019050818103600083015261237581612339565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220550d62844997d0ae570f629b79aa16a911485f5d80e35aacfd2bf3f5a0fd2b4564736f6c63430008110033