0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f746f6b656e206e616d65000000000000000000000000000000000000000000008152506002908162000058919062000460565b506012600360006101000a81548160ff021916908360ff1602179055506040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525060049081620000bb919062000460565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900460ff16600a6200011b9190620006d7565b620186a06200012b919062000728565b6006819055506006546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620001d8919062000784565b60405180910390a3620007a1565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005d557808604811115620005ad57620005ac62000547565b5b6001851615620005bd5780820291505b8081029050620005cd8562000576565b94506200058d565b94509492505050565b600082620005f05760019050620006c3565b81620006005760009050620006c3565b816001811462000619576002811462000624576200065a565b6001915050620006c3565b60ff84111562000639576200063862000547565b5b8360020a91508482111562000653576200065262000547565b5b50620006c3565b5060208310610133831016604e8410600b8410161715620006945782820a9050838111156200068e576200068d62000547565b5b620006c3565b620006a3848484600162000583565b92509050818404811115620006bd57620006bc62000547565b5b81810290505b9392505050565b600060ff82169050919050565b6000620006e4826200030c565b9150620006f183620006ca565b9250620007207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005de565b905092915050565b600062000735826200030c565b915062000742836200030c565b925082820262000752816200030c565b915082820484148315176200076c576200076b62000547565b5b5092915050565b6200077e816200030c565b82525050565b60006020820190506200079b600083018462000773565b92915050565b611b3380620007b16000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a082311161009757806395d89b411161006657806395d89b41146102c2578063a9059cbb146102e0578063c204642c14610310578063dd62ed3e1461032c576100f5565b806370a082311461021457806379cc6790146102445780638863dd1a146102745780638da5cb5b146102a4576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806340c10f19146101b457806342966c68146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b61010261035c565b60405161010f9190611337565b60405180910390f35b610132600480360381019061012d9190611401565b6103ee565b60405161013f919061145c565b60405180910390f35b61015061054e565b60405161015d9190611486565b60405180910390f35b610180600480360381019061017b91906114a1565b610558565b60405161018d919061145c565b60405180910390f35b61019e61090d565b6040516101ab9190611510565b60405180910390f35b6101ce60048036038101906101c99190611401565b610924565b6040516101db919061145c565b60405180910390f35b6101fe60048036038101906101f9919061152b565b610a94565b60405161020b919061145c565b60405180910390f35b61022e60048036038101906102299190611558565b610b73565b60405161023b9190611486565b60405180910390f35b61025e60048036038101906102599190611401565b610bbb565b60405161026b919061145c565b60405180910390f35b61028e60048036038101906102899190611558565b610d2b565b60405161029b919061145c565b60405180910390f35b6102ac610e07565b6040516102b99190611594565b60405180910390f35b6102ca610e31565b6040516102d79190611337565b60405180910390f35b6102fa60048036038101906102f59190611401565b610ec3565b604051610307919061145c565b60405180910390f35b61032a600480360381019061032591906116f7565b6110cd565b005b61034660048036038101906103419190611753565b611220565b6040516103539190611486565b60405180910390f35b60606002805461036b906117c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610397906117c2565b80156103e45780601f106103b9576101008083540402835291602001916103e4565b820191906000526020600020905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361045e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559061183f565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161053c9190611486565b60405180910390a36001905092915050565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bf906118ab565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f9061193d565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156107275750828110155b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d906119cf565b60405180910390fd5b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107b49190611a1e565b92505081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108099190611a52565b92505081905550828161081c9190611a52565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108f99190611486565b60405180910390a360019150509392505050565b6000600360009054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad9061193d565b60405180910390fd5b81600660008282546109c89190611a52565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a1d9190611a52565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a829190611486565b60405180910390a36001905092915050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae49190611a1e565b925050819055508160066000828254610afd9190611a1e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b629190611486565b60405180910390a360019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c449061193d565b60405180910390fd5b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c9b9190611a1e565b925050819055508160066000828254610cb49190611a1e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d199190611486565b60405180910390a36001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db49061193d565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e40906117c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906117c2565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a906118ab565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab906119cf565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110029190611a1e565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110579190611a52565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110bb9190611486565b60405180910390a36001905092915050565b60005b825181101561121b5760008382815181106110ee576110ed611a86565b5b60200260200101519050826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111469190611a1e565b92505081905550826000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119b9190611a52565b925050819055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111ff9190611486565b60405180910390a350808061121390611ab5565b9150506110d0565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112e15780820151818401526020810190506112c6565b60008484015250505050565b6000601f19601f8301169050919050565b6000611309826112a7565b61131381856112b2565b93506113238185602086016112c3565b61132c816112ed565b840191505092915050565b6000602082019050818103600083015261135181846112fe565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113988261136d565b9050919050565b6113a88161138d565b81146113b357600080fd5b50565b6000813590506113c58161139f565b92915050565b6000819050919050565b6113de816113cb565b81146113e957600080fd5b50565b6000813590506113fb816113d5565b92915050565b6000806040838503121561141857611417611363565b5b6000611426858286016113b6565b9250506020611437858286016113ec565b9150509250929050565b60008115159050919050565b61145681611441565b82525050565b6000602082019050611471600083018461144d565b92915050565b611480816113cb565b82525050565b600060208201905061149b6000830184611477565b92915050565b6000806000606084860312156114ba576114b9611363565b5b60006114c8868287016113b6565b93505060206114d9868287016113b6565b92505060406114ea868287016113ec565b9150509250925092565b600060ff82169050919050565b61150a816114f4565b82525050565b60006020820190506115256000830184611501565b92915050565b60006020828403121561154157611540611363565b5b600061154f848285016113ec565b91505092915050565b60006020828403121561156e5761156d611363565b5b600061157c848285016113b6565b91505092915050565b61158e8161138d565b82525050565b60006020820190506115a96000830184611585565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6115ec826112ed565b810181811067ffffffffffffffff8211171561160b5761160a6115b4565b5b80604052505050565b600061161e611359565b905061162a82826115e3565b919050565b600067ffffffffffffffff82111561164a576116496115b4565b5b602082029050602081019050919050565b600080fd5b600061167361166e8461162f565b611614565b905080838252602082019050602084028301858111156116965761169561165b565b5b835b818110156116bf57806116ab88826113b6565b845260208401935050602081019050611698565b5050509392505050565b600082601f8301126116de576116dd6115af565b5b81356116ee848260208601611660565b91505092915050565b6000806040838503121561170e5761170d611363565b5b600083013567ffffffffffffffff81111561172c5761172b611368565b5b611738858286016116c9565b9250506020611749858286016113ec565b9150509250929050565b6000806040838503121561176a57611769611363565b5b6000611778858286016113b6565b9250506020611789858286016113b6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806117da57607f821691505b6020821081036117ed576117ec611793565b5b50919050565b7f45524332303a20417070726f766520746f207a65726f20616464726573730000600082015250565b6000611829601e836112b2565b9150611834826117f3565b602082019050919050565b600060208201905081810360008301526118588161181c565b9050919050565b7f45524332303a205472616e7366657220746f207a65726f206164647265737300600082015250565b6000611895601f836112b2565b91506118a08261185f565b602082019050919050565b600060208201905081810360008301526118c481611888565b9050919050565b7f596f7520617265206e6f74206f776e6572206f66207468697320636f6e74726160008201527f6374210000000000000000000000000000000000000000000000000000000000602082015250565b60006119276023836112b2565b9150611932826118cb565b604082019050919050565b600060208201905081810360008301526119568161191a565b9050919050565b7f546f6b656e2062616c616e6365206973206c6f776572207468616e207468652060008201527f76616c7565207265717565737465642e00000000000000000000000000000000602082015250565b60006119b96030836112b2565b91506119c48261195d565b604082019050919050565b600060208201905081810360008301526119e8816119ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a29826113cb565b9150611a34836113cb565b9250828203905081811115611a4c57611a4b6119ef565b5b92915050565b6000611a5d826113cb565b9150611a68836113cb565b9250828201905080821115611a8057611a7f6119ef565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611ac0826113cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611af257611af16119ef565b5b60018201905091905056fea2646970667358221220c7c8b2b161cd2294256614e1980b8f45651811f0846cbe6a5ee6464e505c183664736f6c63430008120033