//
0x608060405234801561001057600080fd5b5061185f806100206000396000f3fe6080604052600436106100f75760003560e01c80637085e8d41161008a5780639870d7fe116100595780639870d7fe146102f9578063ac8a584a14610319578063bfcecd4514610339578063f2fde38b1461035957600080fd5b80637085e8d41461026c578063715018a61461028c5780638da5cb5b146102a1578063982697dd146102cc57600080fd5b8063518e3d9e116100c6578063518e3d9e146101ba578063588fbd9c146101da5780635bf72b58146101fa57806366666aa91461021a57600080fd5b8063108ba5431461010357806313e7c9d8146101485780631cf1290114610178578063485cc9551461019a57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061013361011e3660046115ea565b60686020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561015457600080fd5b506101336101633660046115ea565b60676020526000908152604090205460ff1681565b34801561018457600080fd5b506101986101933660046115ea565b610379565b005b3480156101a657600080fd5b506101986101b536600461160c565b610499565b3480156101c657600080fd5b506101986101d53660046115ea565b610668565b3480156101e657600080fd5b506101986101f53660046115ea565b61075a565b34801561020657600080fd5b506101986102153660046115ea565b6107d1565b34801561022657600080fd5b506066546102479073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b34801561027857600080fd5b506101986102873660046115ea565b610848565b34801561029857600080fd5b50610198610987565b3480156102ad57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610247565b3480156102d857600080fd5b506065546102479073ffffffffffffffffffffffffffffffffffffffff1681565b34801561030557600080fd5b506101986103143660046115ea565b61099b565b34801561032557600080fd5b506101986103343660046115ea565b610a90565b34801561034557600080fd5b5061019861035436600461163f565b610b81565b34801561036557600080fd5b506101986103743660046115ea565b610ee6565b610381610f83565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604090205460ff166103fb5760405162461bcd60e51b815260206004820152600e60248201527f757364206e6f742065786973747300000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808216600081815260686020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055606554610455931690610fea565b60405173ffffffffffffffffffffffffffffffffffffffff8216907ffeead791ea58187c934dfe35088a80b00e717cf34baa86f4834eae7f4db5deb690600090a250565b600054610100900460ff16158080156104b95750600054600160ff909116105b806104d35750303b1580156104d3575060005460ff166001145b6105455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103f2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105ab611189565b6065805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556066805492851692909116919091179055801561066357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610670610f83565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604090205460ff166106e55760405162461bcd60e51b815260206004820152600b60248201527f696e76616c69642075736400000000000000000000000000000000000000000060448201526064016103f2565b606554819061070f9073ffffffffffffffffffffffffffffffffffffffff80841691166000610fea565b6065546107569073ffffffffffffffffffffffffffffffffffffffff83811691167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fea565b5050565b610762610f83565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe8d3bd2cf85e2a869209a1161a4c1cc07078af8059b29d9d37482c8f406415a890600090a250565b6107d9610f83565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2960baf6793bc0b6accc4e85d9eeae1bee7db9b218d2d95905336cda49e740e290600090a250565b610850610f83565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604090205460ff16156108c65760405162461bcd60e51b815260206004820152600a60248201527f757364206578697374730000000000000000000000000000000000000000000060448201526064016103f2565b73ffffffffffffffffffffffffffffffffffffffff808216600081815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560655461094392167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fea565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fc7e0bb0b9e2e6dd8f69f4a2716236143467864c4d18243bfed482a1132e9eeb490600090a250565b61098f610f83565b610999600061120e565b565b6109a3610f83565b73ffffffffffffffffffffffffffffffffffffffff811660009081526067602052604090205460ff1615610a195760405162461bcd60e51b815260206004820152600f60248201527f6f70657261746f7220657869737473000000000000000000000000000000000060448201526064016103f2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526067602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f4c141abccf173677929dea054f218ed87362117834a8869ec9f68d8bdaaea1dc9190a250565b610a98610f83565b73ffffffffffffffffffffffffffffffffffffffff811660009081526067602052604090205460ff16610b0d5760405162461bcd60e51b815260206004820152601360248201527f6f70657261746f72206e6f74206578697374730000000000000000000000000060448201526064016103f2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526067602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f6b4be2dd49eba45ba43390fbe7da13e2b965d255db41d6a0fcf6d2e15ac1fccb9190a250565b3360009081526067602052604090205460ff16610be05760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964206f70657261746f720000000000000000000000000000000060448201526064016103f2565b73ffffffffffffffffffffffffffffffffffffffff861660009081526068602052604090205460ff16610c555760405162461bcd60e51b815260206004820152600b60248201527f696e76616c69642075736400000000000000000000000000000000000000000060448201526064016103f2565b600085118015610cf357506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152859073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf091906116de565b10155b15610d9d576065546040517fa804266600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a804266690610d58908990899089908990899089906004016116f7565b6020604051808303816000875af1158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b91906116de565b505b4780610deb5760405162461bcd60e51b815260206004820152601360248201527f7a65726f206465706f73697420616d6f756e740000000000000000000000000060448201526064016103f2565b60665460405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d8060008114610e45576040519150601f19603f3d011682016040523d82523d6000602084013e610e4a565b606091505b5050905080610e9b5760405162461bcd60e51b815260206004820152601a60248201527f6465706f7369742072657761726420706f6f6c206661696c656400000000000060448201526064016103f2565b60408051338152602081018990529081018390527f4a1c185b7b5da020829d63d69222d8602aa53a6b7800a73ee6e3e15a625d863d9060600160405180910390a15050505050505050565b610eee610f83565b73ffffffffffffffffffffffffffffffffffffffff8116610f775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103f2565b610f808161120e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f2565b80158061108a57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108891906116de565b155b6110fc5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103f2565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610663908490611285565b600054610100900460ff166112065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103f2565b61099961137a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112e7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114009092919063ffffffff16565b90508051600014806113085750808060200190518101906113089190611776565b6106635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f2565b600054610100900460ff166113f75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103f2565b6109993361120e565b606061140f8484600085611417565b949350505050565b60608247101561148f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114b891906117bc565b60006040518083038185875af1925050503d80600081146114f5576040519150601f19603f3d011682016040523d82523d6000602084013e6114fa565b606091505b509150915061150b87838387611516565b979650505050505050565b6060831561159257825160000361158b5773ffffffffffffffffffffffffffffffffffffffff85163b61158b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f2565b508161140f565b61140f83838151156115a75781518083602001fd5b8060405162461bcd60e51b81526004016103f291906117d8565b803573ffffffffffffffffffffffffffffffffffffffff811681146115e557600080fd5b919050565b6000602082840312156115fc57600080fd5b611605826115c1565b9392505050565b6000806040838503121561161f57600080fd5b611628836115c1565b9150611636602084016115c1565b90509250929050565b60008060008060008060a0878903121561165857600080fd5b611661876115c1565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff8082111561169357600080fd5b818901915089601f8301126116a757600080fd5b8135818111156116b657600080fd5b8a60208285010111156116c857600080fd5b6020830194508093505050509295509295509295565b6000602082840312156116f057600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015284604082015283606082015260a060808201528160a0820152818360c0830137600081830160c090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b60006020828403121561178857600080fd5b8151801515811461160557600080fd5b60005b838110156117b357818101518382015260200161179b565b50506000910152565b600082516117ce818460208701611798565b9190910192915050565b60208152600082518060208401526117f7816040850160208701611798565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220b3014212e80de28f54a8eff8eefdd6bd21075c94024ff1b099d40be3bac8ea5e64736f6c63430008130033