0x60806040526004361061014f5760003560e01c80637c275fb8116100b6578063c44aa1f41161006f578063c44aa1f414610549578063ec8ac4d814610574578063f1a9af89146105b8578063f4206706146105e3578063f7fb07b014610634578063fc0c546a1461065f5761015f565b80637c275fb8146103de5780638d8f2adb1461043457806393bd738514610461578063a3a40ea51461048c578063a6b513ee146104b7578063ab033ea9146104e25761015f565b8063595d221311610108578063595d22131461028c5780635aa6e675146102b757806362f3b1f6146102f85780636f7bc9be1461032357806378a895671461038857806378e97925146103b35761015f565b806303b4a4791461016457806319152e421461018f5780634042b66f146101ba57806345f085a6146101e5578063518ab2a81461023657806355a16c24146102615761015f565b3661015f5761015d336106a0565b005b600080fd5b34801561017057600080fd5b50610179610a94565b6040518082815260200191505060405180910390f35b34801561019b57600080fd5b506101a4610a9a565b6040518082815260200191505060405180910390f35b3480156101c657600080fd5b506101cf610aa0565b6040518082815260200191505060405180910390f35b3480156101f157600080fd5b5061021e6004803603602081101561020857600080fd5b8101908080359060200190929190505050610aa6565b60405180821515815260200191505060405180910390f35b34801561024257600080fd5b5061024b610d4b565b6040518082815260200191505060405180910390f35b34801561026d57600080fd5b50610276610d51565b6040518082815260200191505060405180910390f35b34801561029857600080fd5b506102a1610d57565b6040518082815260200191505060405180910390f35b3480156102c357600080fd5b506102cc610d5d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561030457600080fd5b5061030d610d83565b6040518082815260200191505060405180910390f35b34801561032f57600080fd5b506103726004803603602081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d89565b6040518082815260200191505060405180910390f35b34801561039457600080fd5b5061039d610da7565b6040518082815260200191505060405180910390f35b3480156103bf57600080fd5b506103c8610e74565b6040518082815260200191505060405180910390f35b3480156103ea57600080fd5b506104176004803603602081101561040157600080fd5b8101908080359060200190929190505050610e7a565b604051808381526020018281526020019250505060405180910390f35b34801561044057600080fd5b50610449610efc565b60405180821515815260200191505060405180910390f35b34801561046d57600080fd5b50610476611237565b6040518082815260200191505060405180910390f35b34801561049857600080fd5b506104a161123d565b6040518082815260200191505060405180910390f35b3480156104c357600080fd5b506104cc611327565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b506105316004803603602081101561050557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061132d565b60405180821515815260200191505060405180910390f35b34801561055557600080fd5b5061055e61143c565b6040518082815260200191505060405180910390f35b6105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a0565b005b3480156105c457600080fd5b506105cd611442565b6040518082815260200191505060405180910390f35b3480156105ef57600080fd5b5061061c6004803603602081101561060657600080fd5b8101908080359060200190929190505050611448565b60405180821515815260200191505060405180910390f35b34801561064057600080fd5b5061064961157f565b6040518082815260200191505060405180910390f35b34801561066b57600080fd5b5061067461164c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600034905066038d7ea4c68000811015610705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611d9c6028913960400191505060405180910390fd5b600b5442111561077d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73616c6520697320636c6f73656420210000000000000000000000000000000081525060200191505060405180910390fd5b6001544210156107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f49434f206973206e6f74206f70656e207965742100000000000000000000000081525060200191505060405180910390fd5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006108438361177e565b9050600081116108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f4e65696e0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6108d08360045461167090919063ffffffff16565b600481905550600182600101540182600101819055508160020160008360010154815260200190815260200160002050838260020160008460010154815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508282600201600084600101548152602001908152602001600020600101819055508082600201600084600101548152602001908152602001600020600201819055506109b28160055461167090919063ffffffff16565b600581905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610a20573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188584604051808381526020018281526020019250505060405180910390a350505050565b60085481565b600a5481565b60045481565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b600b544211610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f49434f206973206e6f742066696e69736865642e2e2e0000000000000000000081525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b505050506040513d6020811015610cbf57600080fd5b8101908080519060200190929190505050610d42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5472616e73666572206e6f74207375636365737366756c00000000000000000081525060200191505060405180910390fd5b60019050919050565b60055481565b60065481565b60075481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600d6020528060005260406000206000915090508060010154905081565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020160008360010154815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600080600190505b8360010154811015610e6a5783600201600082815260200190815260200160002060020154820191508080600101915050610e34565b5080935050505090565b60015481565b6000806000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600201600085815260200190815260200160002060010154816002016000868152602001908152602001600020600201549250925050915091565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020160008360010154815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6e6f742076616c696420696e766573746f7220746f207769746864726177202181525060200191505060405180910390fd5b600b5442101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f21746f6b656e732063616e6e6f742062652077697468647261776e206e6f770081525060200191505060405180910390fd5b6000600190505b8260010154811161122d5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856002016000858152602001908152602001600020600201546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b505050506040513d602081101561117f57600080fd5b8101908080519060200190929190505050611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5472616e73666572206e6f74207375636365737366756c00000000000000000081525060200191505060405180910390fd5b60008360020160008381526020019081526020016000206002018190555080806001019150506110a1565b5060019250505090565b600c5481565b600080429050600154811015611257576000915050611324565b600154811015801561126f5750600c54600954038111155b1561127e576001915050611324565b600c546009540381118015611294575060095481105b156112a3576002915050611324565b600954811180156112b95750600c54600a540381105b156112c8576003915050611324565b600c54600a5403811180156112de5750600a5481105b156112ed576004915050611324565b600a54811180156112ff5750600b5481105b1561130e576005915050611324565b600b54811115611322576006915050611324565b505b90565b60035481565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60095481565b60025481565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4f6e6c7920617574686f72697a6564206d6574686f642021000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611575573d6000803e3d6000fd5b5060019050919050565b6000600b544211156115945760009050611649565b6001544210156115a75760289050611649565b60006115be60015442611b6090919063ffffffff16565b905060006115ed6001546115df600c54600b5461167090919063ffffffff16565b611b6090919063ffffffff16565b90506000611608600354600254611b6090919063ffffffff16565b90506116436116328361162484876116f890919063ffffffff16565b611baa90919063ffffffff16565b600254611b6090919063ffffffff16565b93505050505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156116ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561170b5760009050611778565b600082840290508284828161171c57fe5b0414611773576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611d7b6021913960400191505060405180910390fd5b809150505b92915050565b60008042905060006117a9816117a461179561157f565b876116f890919063ffffffff16565b611670565b9250600c5460095403821161186957600083600654031061185f5760008360065403101561183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f7068617365206f6e6520737570706c7920656e6465642021000000000000000081525060200191505060405180910390fd5b61185483600654611b6090919063ffffffff16565b600681905550611864565b600092505b611b59565b600c54600954038211801561187f575060095482105b1561191f576000925060008014156118ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f49444c452054494d45203120210000000000000000000000000000000000000081525060200191505060405180910390fd5b61191483600754611b6090919063ffffffff16565b600781905550611b58565b600954821180156119355750600c54600a540382105b156119eb5760008360075403106119e1576000836007540310156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f70686173652074776f20737570706c7920656e6465642021000000000000000081525060200191505060405180910390fd5b6119d683600754611b6090919063ffffffff16565b6007819055506119e6565b600092505b611b57565b600c54600a540382118015611a015750600a5482105b15611a9157600092506000801415611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f49444c452054494d45203220210000000000000000000000000000000000000081525060200191505060405180910390fd5b8260075403600781905550611b56565b600a5482118015611aa35750600b5482105b15611b55576000836008540310611b4f57600083600854031015611b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f706861736520746872656520737570706c7920656e646564202100000000000081525060200191505060405180910390fd5b611b4483600854611b6090919063ffffffff16565b600881905550611b54565b600092505b5b5b5b5b5b5050919050565b6000611ba283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bf4565b905092915050565b6000611bec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611cb4565b905092915050565b6000838311158290611ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c66578082015181840152602081019050611c4b565b50505050905090810190601f168015611c935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611d60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d25578082015181840152602081019050611d0a565b50505050905090810190601f168015611d525780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611d6c57fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e766573746d656e742073686f756c64206265206d6f7265207468616e20302e30303120455448a26469706673582212203fd9cbaec5ff5624dbbf617ccd68cdea7822fa981b5c0fbe645b81568d1ff5d664736f6c634300060c0033