0x60a06040523480156200001157600080fd5b506200001c620000b2565b6200002733620000ff565b62000032816200014f565b50604051620000446020820162000204565b601f19828203810183526000601f9092011690815260208101604090815262000071913091810162000253565b60408051601f198184030181529082905262000091929160200162000297565b60408051601f198184030181529190528051602090910120608052620002ca565b6000806000604051620000c59062000212565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620000f9573d6000803e3d6000fd5b50905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200016581620001fe60201b620008f71760201c565b620001dc5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610a848062001b4483390190565b61545080620025c883390190565b60005b838110156200023d57818101518382015260200162000223565b838111156200024d576000848401525b50505050565b60018060a01b038316815260406020820152600082518060408401526200028281606085016020870162000220565b601f01601f1916919091016060019392505050565b60008351620002ab81846020880162000220565b835190830190620002c181836020880162000220565b01949350505050565b60805161185e620002e66000396000610698015261185e6000f3fe60806040523480156200001157600080fd5b5060043610620000d95760003560e01c80635c60da1b116200008b578063bec595821162000062578063bec5958214620001ea578063e74b981b1462000201578063f2fde38b146200021857600080fd5b80635c60da1b14620001a2578063715018a614620001c15780638da5cb5b14620001cb57600080fd5b806331f8a7f311620000c057806331f8a7f3146200012d5780633659cfe6146200016a57806346904840146200018157600080fd5b80630e986d7f14620000de5780632ccc552e1462000114575b600080fd5b62000101620000ef36600462000ae1565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6200012b6200012536600462000b25565b6200022f565b005b620001446200013e36600462000bea565b6200037f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016200010b565b6200012b6200017b36600462000c26565b620004ed565b600254620001449073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1662000144565b6200012b620005bf565b60005473ffffffffffffffffffffffffffffffffffffffff1662000144565b62000144620001fb36600462000c46565b62000650565b6200012b6200021236600462000c26565b620006c5565b6200012b6200022936600462000c26565b620007c1565b60005473ffffffffffffffffffffffffffffffffffffffff163314620002b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b8281101562000379576000848483818110620002d957620002d962000c80565b9050602002016020810190620002f0919062000ae1565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000818152600360205260409081902086905551919250907f42cefd6e3811b091d9fd2b2afcc062bae53bc3290e79b6ee03fa8f2f0c1ac49f906200035b9086815260200190565b60405180910390a25080620003708162000caf565b915050620002b9565b50505050565b604080516000808252602082019092523360a085901b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179081903090604051620003cb9062000ad3565b620003d892919062000d10565b8190604051809103906000f5905080158015620003f9573d6000803e3d6000fd5b506040517f485cc95500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301529193509083169063485cc95590604401600060405180830381600087803b1580156200046e57600080fd5b505af115801562000483573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff80871693508516915033907f59da2778b791ed5f2be380282959631fc07669426505cc411dce116af076d56e9060200160405180910390a45092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b6200057b81620008fd565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b6200064e6000620009d4565b565b60007fffffffffffffffffffffffff000000000000000000000000000000000000000060a083901b1673ffffffffffffffffffffffffffffffffffffffff841617620006bd817f000000000000000000000000000000000000000000000000000000000000000062000a49565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f6632de8ab33c46549f7bb29f647ea0d751157b25fe6a14b1bcc7527cdfbeb79c9060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b73ffffffffffffffffffffffffffffffffffffffff8116620008e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620002ad565b620008f481620009d4565b50565b3b151590565b803b6200098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401620002ad565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b9392505050565b610a848062000da583390190565b60006020828403121562000af457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811462000acc57600080fd5b60008060006040848603121562000b3b57600080fd5b833567ffffffffffffffff8082111562000b5457600080fd5b818601915086601f83011262000b6957600080fd5b81358181111562000b7957600080fd5b8760208260051b850101111562000b8f57600080fd5b6020928301989097509590910135949350505050565b80356bffffffffffffffffffffffff8116811462000bc257600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114620008f457600080fd5b6000806040838503121562000bfe57600080fd5b62000c098362000ba5565b9150602083013562000c1b8162000bc7565b809150509250929050565b60006020828403121562000c3957600080fd5b813562000acc8162000bc7565b6000806040838503121562000c5a57600080fd5b823562000c678162000bc7565b915062000c776020840162000ba5565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000d09577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101562000d5c5785810183015185820160600152820162000d3e565b8181111562000d6f576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fe608060405260405162000a8438038062000a848339810160408190526200002691620004d4565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51620005a2565b60008051602062000a3d83398151915214620000735762000073620005c8565b620000818282600062000089565b50506200064f565b62000094836200016e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001695762000167836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011a57600080fd5b505afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001559190620005de565b836200031f60201b620000291760201c565b505b505050565b62000184816200034e60201b620000551760201c565b620001e45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200026e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005de565b6200034e60201b620000551760201c565b620002d55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001db565b80620002fe60008051602062000a3d83398151915260001b6200035460201b6200005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000347838360405180606001604052806027815260200162000a5d6027913962000357565b9392505050565b3b151590565b90565b6060833b620003b85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001db565b600080856001600160a01b031685604051620003d59190620005fc565b600060405180830381855af49150503d806000811462000412576040519150601f19603f3d011682016040523d82523d6000602084013e62000417565b606091505b5090925090506200042a82828662000434565b9695505050505050565b606083156200044557508162000347565b825115620004565782518084602001fd5b8160405162461bcd60e51b8152600401620001db91906200061a565b80516001600160a01b03811681146200048a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004c2578181015183820152602001620004a8565b83811115620001675750506000910152565b60008060408385031215620004e857600080fd5b620004f38362000472565b60208401519092506001600160401b03808211156200051157600080fd5b818501915085601f8301126200052657600080fd5b8151818111156200053b576200053b6200048f565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200048f565b816040528281528860208487010111156200058057600080fd5b62000593836020830160208801620004a5565b80955050505050509250929050565b600082821015620005c357634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005f157600080fd5b620003478262000472565b6000825162000610818460208701620004a5565b9190910192915050565b60208152600082518060208401526200063b816040850160208701620004a5565b601f01601f19169190910160400192915050565b6103de806200065f6000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610120565b565b606061004e838360405180606001604052806027815260200161038260279139610144565b9392505050565b3b151590565b90565b600061009e7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102ae565b905090565b3660008037600080366000845af43d6000803e80801561013f573d6000f35b3d6000fd5b6060833b6101d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516102019190610314565b600060405180830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b509150915061025182828661025b565b9695505050505050565b6060831561026a57508161004e565b82511561027a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d09190610330565b6000602082840312156102c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b838110156102ff5781810151838201526020016102e7565b8381111561030e576000848401525b50505050565b600082516103268184602087016102e4565b9190910192915050565b602081526000825180602084015261034f8160408501602087016102e4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220cc40463d762d54130ecace4a06e8dae4a0d1c925a882d9104aa13a995affe78c64736f6c63430008090033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203b30d6ed5e0668771a13ea7a1e73bb73d888e900f87b830bd539e0bc1852ebea64736f6c63430008090033608060405260405162000a8438038062000a848339810160408190526200002691620004d4565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51620005a2565b60008051602062000a3d83398151915214620000735762000073620005c8565b620000818282600062000089565b50506200064f565b62000094836200016e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001695762000167836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011a57600080fd5b505afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001559190620005de565b836200031f60201b620000291760201c565b505b505050565b62000184816200034e60201b620000551760201c565b620001e45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200026e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005de565b6200034e60201b620000551760201c565b620002d55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001db565b80620002fe60008051602062000a3d83398151915260001b6200035460201b6200005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000347838360405180606001604052806027815260200162000a5d6027913962000357565b9392505050565b3b151590565b90565b6060833b620003b85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001db565b600080856001600160a01b031685604051620003d59190620005fc565b600060405180830381855af49150503d806000811462000412576040519150601f19603f3d011682016040523d82523d6000602084013e62000417565b606091505b5090925090506200042a82828662000434565b9695505050505050565b606083156200044557508162000347565b825115620004565782518084602001fd5b8160405162461bcd60e51b8152600401620001db91906200061a565b80516001600160a01b03811681146200048a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004c2578181015183820152602001620004a8565b83811115620001675750506000910152565b60008060408385031215620004e857600080fd5b620004f38362000472565b60208401519092506001600160401b03808211156200051157600080fd5b818501915085601f8301126200052657600080fd5b8151818111156200053b576200053b6200048f565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200048f565b816040528281528860208487010111156200058057600080fd5b62000593836020830160208801620004a5565b80955050505050509250929050565b600082821015620005c357634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005f157600080fd5b620003478262000472565b6000825162000610818460208701620004a5565b9190910192915050565b60208152600082518060208401526200063b816040850160208701620004a5565b601f01601f19169190910160400192915050565b6103de806200065f6000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610120565b565b606061004e838360405180606001604052806027815260200161038260279139610144565b9392505050565b3b151590565b90565b600061009e7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102ae565b905090565b3660008037600080366000845af43d6000803e80801561013f573d6000f35b3d6000fd5b6060833b6101d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516102019190610314565b600060405180830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b509150915061025182828661025b565b9695505050505050565b6060831561026a57508161004e565b82511561027a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d09190610330565b6000602082840312156102c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b838110156102ff5781810151838201526020016102e7565b8381111561030e576000848401525b50505050565b600082516103268184602087016102e4565b9190910192915050565b602081526000825180602084015261034f8160408501602087016102e4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220cc40463d762d54130ecace4a06e8dae4a0d1c925a882d9104aa13a995affe78c64736f6c63430008090033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460806040523480156200001157600080fd5b5060405162005450380380620054508339810160408190526200003491620001f1565b6200003f3362000058565b6001600255620000508282620000aa565b505062000229565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600354610100900460ff1680620000c4575060035460ff16155b6200012c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600354610100900460ff161580156200014f576003805461ffff19166101011790555b6200015a8362000193565b600b80546001600160a01b0319166001600160a01b038416179055600019600f5580156200018e576003805461ff00191690555b505050565b6200019e8162000058565b506003805462010000600160b01b031916336201000002179055426005556009805460ff19169055670de0b6b3a7640000600a55565b80516001600160a01b0381168114620001ec57600080fd5b919050565b600080604083850312156200020557600080fd5b6200021083620001d4565b91506200022060208401620001d4565b90509250929050565b61521780620002396000396000f3fe6080604052600436106102db5760003560e01c80638744cac011610184578063cbecf6b5116100d6578063dfe138a61161008a578063f2fde38b11610064578063f2fde38b1461094e578063f8077fae1461096e578063fed739191461098457600080fd5b8063dfe138a6146108ee578063e6ab485414610918578063e72f6e301461092e57600080fd5b8063d1941b06116100bb578063d1941b06146108a8578063d7b35301146108bb578063dd467064146108ce57600080fd5b8063cbecf6b5146107cd578063cc33c8751461082f57600080fd5b806395b881de11610138578063abb06b9511610112578063abb06b9514610758578063c3bfeb531461076d578063c45a01551461079a57600080fd5b806395b881de146107025780639ced7e76146107225780639f181b5e1461074257600080fd5b80638da5cb5b116101695780638da5cb5b146106af5780638ed955b9146106da5780638eff9a60146106e257600080fd5b80638744cac01461067c57806388e271b61461068f57600080fd5b806343dcbe691161023d57806366993646116101f15780636f2c590a116101cb5780636f2c590a14610624578063715018a61461063a5780637de1e5361461064f57600080fd5b806366993646146105155780636bd3b87c146105ad5780636eef7a781461060457600080fd5b8063509b6c3f11610222578063509b6c3f1461049f5780635d0cde97146104e45780635f3b443a146104f957600080fd5b806343dcbe6914610452578063485cc9551461047f57600080fd5b806318c08f26116102945780633355ffac116102795780633355ffac146103fc5780633a98ef391461041c5780633d509c971461043257600080fd5b806318c08f26146103c95780631c03e6cc146103dc57600080fd5b806307c4e48b116102c557806307c4e48b1461032b5780630e5c011e14610341578063150b7a021461035457600080fd5b806206c617146102e0578063043063bc14610302575b600080fd5b3480156102ec57600080fd5b506103006102fb366004614aea565b610999565b005b34801561030e57600080fd5b5061031861016d81565b6040519081526020015b60405180910390f35b34801561033757600080fd5b50610318600e5481565b61030061034f366004614b16565b610b0b565b34801561036057600080fd5b5061039861036f366004614b62565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610322565b6103006103d7366004614ca5565b610da5565b3480156103e857600080fd5b506103006103f7366004614b16565b611271565b34801561040857600080fd5b50610300610417366004614ce7565b6114b9565b34801561042857600080fd5b5061031860045481565b34801561043e57600080fd5b5061030061044d366004614b16565b6116d8565b34801561045e57600080fd5b5061031861046d366004614b16565b60086020526000908152604090205481565b34801561048b57600080fd5b5061030061049a366004614d09565b6119e4565b3480156104ab57600080fd5b506104bf6104ba366004614d42565b611b69565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610322565b3480156104f057600080fd5b50610318600a81565b34801561050557600080fd5b50610318670de0b6b3a764000081565b34801561052157600080fd5b50610592610530366004614d09565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff9485168152600882528281209390941684526001928301815292819020815180830190925280548252909101549181019190915290565b60408051825181526020928301519281019290925201610322565b3480156105b957600080fd5b506105e96105c8366004614b16565b60006020819052908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610322565b34801561061057600080fd5b5061030061061f366004614d69565b611ba0565b34801561063057600080fd5b50610318600a5481565b34801561064657600080fd5b50610300611ca7565b34801561065b57600080fd5b50600b546104bf9073ffffffffffffffffffffffffffffffffffffffff1681565b61030061068a366004614d86565b611d34565b34801561069b57600080fd5b506103006106aa366004614aea565b612339565b3480156106bb57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166104bf565b61030061253b565b3480156106ee57600080fd5b506103006106fd366004614ddd565b61277f565b34801561070e57600080fd5b5061031861071d366004614b16565b612a0e565b34801561072e57600080fd5b5061031861073d366004614d09565b612aea565b34801561074e57600080fd5b50610318600c5481565b34801561076457600080fd5b50600654610318565b34801561077957600080fd5b50610318610788366004614b16565b60106020526000908152604090205481565b3480156107a657600080fd5b506003546104bf9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d957600080fd5b5061080f6107e8366004614b16565b60076020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610322565b34801561083b57600080fd5b5061087c61084a366004614d42565b600d602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9091169082565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610322565b6103006108b6366004614ca5565b612c35565b6103006108c9366004614d86565b6130f4565b3480156108da57600080fd5b506103006108e9366004614d42565b61367c565b3480156108fa57600080fd5b506009546109089060ff1681565b6040519015158152602001610322565b34801561092457600080fd5b50610318600f5481565b34801561093a57600080fd5b50610318610949366004614b16565b613799565b34801561095a57600080fd5b50610300610969366004614b16565b61391b565b34801561097a57600080fd5b5061031860055481565b34801561099057600080fd5b50610318601481565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610a27613a4b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090208054610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610a16565b6002810182905560405182815273ffffffffffffffffffffffffffffffffffffffff8416907f1db4bb723cb902ca89ee9de44648632638ceb6623dcfa7366a851881852300d49060200160405180910390a2505050565b600280541415610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055600080610b883682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015610c1e57600080fd5b505afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c569190614e71565b9050610c628184614eb9565b3414610cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b8015610d9057610d9081600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190614ed1565b73ffffffffffffffffffffffffffffffffffffffff1690613b8d565b5050610d9c3383613ce7565b50506001600255565b600280541415610e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055600080610e223682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015610eb857600080fd5b505afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190614e71565b9050610efc8184614eb9565b3414610f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b8015610fd657610fd681600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b5050610fe133613d38565b50336000908152601060205260409020805483919080831461105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e636f6d706c657465206c69737400000000000000000000000000000000006044820152606401610a16565b821561120b5760008083555b838110156111f257600087878381811061108757611087614eee565b602090810292909201356000818152600d909352604090922080549293509173ffffffffffffffffffffffffffffffffffffffff1633149050611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610a16565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906342842e0e90606401600060405180830381600087803b15801561119e57600080fd5b505af11580156111b2573d6000803e3d6000fd5b505082547fffffffffffffffffffffffff000000000000000000000000000000000000000016909255508291506111ea905081614f1d565b91505061106b565b5082600c60008282546112059190614f56565b90915550505b3373ffffffffffffffffffffffffffffffffffffffff167f94b2825784ead7bf06b2073c9dd15d5f5c1bc09138d4b03805fc9809d26e39018787604051611253929190614fbc565b60405180910390a261126433613e12565b5050600160025550505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b6112fa613a4b565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600760205260409020805415611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c696361746520746f6b656e00000000000000000000000000000000006044820152606401610a16565b600654600a81106113f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6c696d69742072656163686564000000000000000000000000000000000000006044820152606401610a16565b60068054600180820183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055611471908290614eb9565b825560405173ffffffffffffffffffffffffffffffffffffffff8416907f851bbb4304bf0768ed98b97e429b5bd1dcc1f194b36cd1650f40293e951ae39390600090a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b60148111156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f68617264206c696d6974000000000000000000000000000000000000000000006044820152606401610a16565b8082111561160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c6964206c696d6974730000000000000000000000000000000000006044820152606401610a16565b600c541561169157600e54821115801561162b575080600f5411155b611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e657870616e646564206c696d6974730000000000000000000000000000006044820152606401610a16565b600e829055600f81905560408051838152602081018390527f7b0e4f7d04c9ce35dcb1e1370d62110185eb169c88452622c70f96d78a3cad3f910160405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b611761613a4b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604090208054806117ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610a16565b60018201541561185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f70656e64696e67207265776172640000000000000000000000000000000000006044820152606401610a16565b6000808355600283018190556003830155600654808210156119345760006006611886600184614f56565b8154811061189657611896614eee565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168083526007909152604090912084905590508060066118da600186614f56565b815481106118ea576118ea614eee565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b600680548061194557611945614fd0565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560405173ffffffffffffffffffffffffffffffffffffffff8616917f36bd04094fa067bb9471a8fbdb0a6e8a43424a2566ad3a740c88973fa40a311891a250505050565b600354610100900460ff16806119fd575060035460ff16155b611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a16565b600354610100900460ff16158015611ac857600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b611ad183613e8b565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f558015611b6457600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b60068181548110611b7957600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b611c29613a4b565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151517905580611c6857670de0b6b3a7640000611c6c565b6004545b600a5560405181151581527f3070602ec40a9344ebb1e5efa4731dc84be5f7b23bbe1ee962a966176e696bbf9060200160405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b611d326000613efe565b565b600280541415611da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055600080611db13682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f9190614e71565b9050611e8b8184614eb9565b3414611ef3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b8015611f6557611f6581600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b50508115611f7657611f7633613f75565b6000611f8133613d38565b3360009081526010602052604090208054919250859180831115612001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610a16565b600061200d8483614f56565b9050801561208f5780600e54111580156120295750600f548111155b61208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642062616c616e636500000000000000000000000000000000006044820152606401610a16565b831561223b5780835560005b848110156122225760008a8a838181106120b7576120b7614eee565b602090810292909201356000818152600d909352604090922080549293509173ffffffffffffffffffffffffffffffffffffffff1633149050612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610a16565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906342842e0e90606401600060405180830381600087803b1580156121ce57600080fd5b505af11580156121e2573d6000803e3d6000fd5b505082547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092555082915061221a905081614f1d565b91505061209b565b5083600c60008282546122359190614f56565b90915550505b3373ffffffffffffffffffffffffffffffffffffffff167f67e9df8b3c7743c9f1b625ba4f2b4e601206dbd46ed5c33c85a1242e4d23a2d18a8a604051612283929190614fbc565b60405180910390a26000805b858110156122f757600d60008c8c848181106122ad576122ad614eee565b90506020020135815260200190815260200160002060010154670de0b6b3a76400006122d99190614fff565b6122e39083614eb9565b9150806122ef81614f1d565b91505061228f565b5061232833670de0b6b3a764000061230f8985615073565b61231991906150df565b6123239084614eb9565b614005565b505060016002555050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146123ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b600280541415612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055612432613a4b565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260076020526040902080546124bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610a16565b6124e173ffffffffffffffffffffffffffffffffffffffff841633308561408a565b8273ffffffffffffffffffffffffffffffffffffffff167f2386108be9237e6cebb631ec77ea4474231e519e0b4963993a76350110b011738360405161252991815260200190565b60405180910390a25050600160025550565b6002805414156125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b600280556000806125b83682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b15801561264e57600080fd5b505afa158015612662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126869190614e71565b90506126928184614eb9565b34146126fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b801561276c5761276c81600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505061277733613f75565b506001600255565b60015473ffffffffffffffffffffffffffffffffffffffff163314612800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b807ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000131580156128385750670de0b6b3a76400008113155b61289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c6964207765696768740000000000000000000000000000000000006044820152606401610a16565b8160005b818110156129cc576000600d60008787858181106128c2576128c2614eee565b602090810292909201358352508101919091526040016000206001810180549086905581549192509073ffffffffffffffffffffffffffffffffffffffff1680156129b65773ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120600201549061294384670de0b6b3a7640000614fff565b9050600061295989670de0b6b3a7640000614fff565b90506129b284670de0b6b3a76400006129728686615073565b61297c91906150df565b6129869085614eb9565b670de0b6b3a76400006129998786615073565b6129a391906150df565b6129ad9085614eb9565b614166565b5050505b50505080806129c490614f1d565b9150506128a2565b507fc5ae678582efeb4645ec116c037eca8fd76f6f9a12a0ee11b59f453d0c1153ee848484604051612a00939291906150f3565b60405180910390a150505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae9190614e71565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260076020526040902060010154909150612ae49082614f56565b92915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604081206003810154600554421115612bb55760045415612bb5576000670de0b6b3a7640000600a54846002015460055442612b479190614f56565b612b519190615073565b612b5b9190615073565b612b6591906150df565b90506000612b7286612a0e565b905080821115612b80578091505b8115612bb257600454612b9b83670de0b6b3a7640000615073565b612ba591906150df565b612baf9084614eb9565b92505b50505b73ffffffffffffffffffffffffffffffffffffffff808616600090815260086020908152604080832093881683526001808501909252909120908101548254670de0b6b3a76400009190612c0a908690615073565b612c149190614f56565b612c1e91906150df565b8154612c2a9190614eb9565b979650505050505050565b600280541415612ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055600080612cb23682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015612d4857600080fd5b505afa158015612d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d809190614e71565b9050612d8c8184614eb9565b3414612df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b8015612e6657612e6681600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b5050612e7133613d38565b503360009081526010602052604090208054839190808314612eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e636f6d706c657465206c69737400000000000000000000000000000000006044820152606401610a16565b821561309b5760008083555b83811015613082576000878783818110612f1757612f17614eee565b602090810292909201356000818152600d909352604090922080549293509173ffffffffffffffffffffffffffffffffffffffff1633149050612fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610a16565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906342842e0e90606401600060405180830381600087803b15801561302e57600080fd5b505af1158015613042573d6000803e3d6000fd5b505082547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092555082915061307a905081614f1d565b915050612efb565b5082600c60008282546130959190614f56565b90915550505b3373ffffffffffffffffffffffffffffffffffffffff167f1ad6082f7aa3e32095e38fd4c0bf76fa2bb7584e81474cf3519d2dea4081181c87876040516130e3929190614fbc565b60405180910390a2611264336141fa565b600280541415613160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b600280556000806131713682614e29565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b15801561320757600080fd5b505afa15801561321b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323f9190614e71565b905061324b8184614eb9565b34146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610a16565b80156133255761332581600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505081156133365761333633613f75565b336000908152601060205260408120805485926133538483614eb9565b905080156133d55780600e541115801561336f5750600f548111155b6133d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642062616c616e636500000000000000000000000000000000006044820152606401610a16565b83156135825780835560005b848110156135695760008989838181106133fd576133fd614eee565b602090810292909201356000818152600d909352604090922080549293509173ffffffffffffffffffffffffffffffffffffffff1615905061349b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610a16565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906342842e0e90606401600060405180830381600087803b15801561351357600080fd5b505af1158015613527573d6000803e3d6000fd5b505082547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790925550829150613561905081614f1d565b9150506133e1565b5083600c600082825461357c9190614eb9565b90915550505b3373ffffffffffffffffffffffffffffffffffffffff167fff409334d2645d660e7cfa41a637aa21f45a79ecb9660a6931aa923bf75577c789896040516135ca929190614fbc565b60405180910390a260006135dd33614262565b90506000805b8681101561364b57600d60008c8c8481811061360157613601614eee565b90506020020135815260200190815260200160002060010154670de0b6b3a764000061362d9190614fff565b6136379083614eb9565b91508061364381614f1d565b9150506135e3565b5061232833670de0b6b3a76400006136638585615073565b61366d91906150df565b6136779084614eb9565b6142a4565b6002805414156136e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b600280556000806136f9338461430a565b33600081815260086020908152604091829020805483518a81529283018690529597509395509293927f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b910160405180910390a260008111801561375d5750828414155b1561378d5761378d33670de0b6b3a76400006137798785615073565b61378391906150df565b6129869084614eb9565b50506001600255505050565b60015460009073ffffffffffffffffffffffffffffffffffffffff16331461381d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b600280541415613889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a16565b60028055613895613a4b565b61389e82612a0e565b90506138c173ffffffffffffffffffffffffffffffffffffffff831633836144e4565b8173ffffffffffffffffffffffffffffffffffffffff167f4ba2f3b044735356db52c2c595cfedd05fa9d53ba8ae3c34bbe10a7096e1888d8260405161390991815260200190565b60405180910390a26001600255919050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461399c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a16565b73ffffffffffffffffffffffffffffffffffffffff8116613a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a16565b613a4881613efe565b50565b600554421115611d325760045415613b8757600060055442613a6d9190614f56565b60065490915060005b81811015613b8357600060068281548110613a9357613a93614eee565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600790915260408220600a546002820154929450909291670de0b6b3a76400009190613ae69089615073565b613af09190615073565b613afa91906150df565b90506000613b0784612a0e565b905080821115613b15578091505b8115613b6c5781836001016000828254613b2f9190614eb9565b9091555050600454613b4983670de0b6b3a7640000615073565b613b5391906150df565b836003016000828254613b669190614eb9565b90915550505b505050508080613b7b90614f1d565b915050613a76565b5050505b42600555565b80471015613bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a16565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613c51576040519150601f19603f3d011682016040523d82523d6000602084013e613c56565b606091505b5050905080611b64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a16565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040902080548015613d2757613d1c613a4b565b613d2782828361453a565b613d32848385614610565b50505050565b600080613d4862015180426150df565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090206001810154919250908015613e065781548084118015613d9e5750613d928282615117565b613d9c8386615117565b145b613e04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f7420617661696c61626c65000000000000000000000000000000000000006044820152606401610a16565b505b50600201549392505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020526040902080548015613e8157613e47613a4b565b613e538282600061453a565b600080835560048054839290613e6a908490614f56565b909155505060095460ff1615613e8157600454600a555b611b648383614711565b613e9481613efe565b50600380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1633620100000217905542600555600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055670de0b6b3a7640000600a55565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020526040902080548015613fb557613faa613a4b565b613fb582828361453a565b613fbf8383614711565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f951da9d56bc4c88666815902e196576135a88dc5bdbcc4e8511e2054f61a152490600090a2505050565b80156140865773ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081208054909161403e8483614f56565b9050614048613a4b565b61405383838361453a565b8083556004805485919060009061406b908490614f56565b909155505060095460ff161561408257600454600a555b5050505b5050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d329085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614770565b808214611b645773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040812080549091836141a18684614f56565b6141ab9190614eb9565b90506141b5613a4b565b6141c083838361453a565b80835560045484906141d3908790614f56565b6141dd9190614eb9565b60045560095460ff16156141f257600454600a555b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020526040902080548015611b64576142308261487c565b600080835560048054839290614247908490614f56565b909155505060095460ff1615611b6457600454600a55505050565b60008061427262015180426150df565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092835550506002015490565b80156140865773ffffffffffffffffffffffffffffffffffffffff82166000908152600860205260408120805490916142dd8483614eb9565b90506142e7613a4b565b6142f283838361453a565b8083556004805485919060009061406b908490614eb9565b6000808061431b62015180426150df565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902060018101549192509080861015614437578154600061435f8383615117565b9050600061436d8487615117565b905060008282116143ad578282106143935786841061438d5760006143b7565b846143b7565b8261439e8684614eb9565b6143a89190614f56565b6143b7565b6143b78383614f56565b905060006143c58287614f56565b9050808b1015614431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f62656c6f77206d696e696d756d000000000000000000000000000000000000006044820152606401610a16565b50505050505b61016d8611156144a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f61626f7665206d6178696d756d000000000000000000000000000000000000006044820152606401610a16565b6002820154945061016d6144bf87670de0b6b3a7640000615073565b6144c991906150df565b928255506001810185905560020181905590505b9250929050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611b649084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016140e4565b60065460005b818110156140825760006006828154811061455d5761455d614eee565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168083526007825260408084206003015460018b019093529092209192509086156145eb576001810154670de0b6b3a7640000906145be848a615073565b6145c89190614f56565b6145d291906150df565b8160000160008282546145e59190614eb9565b90915550505b6145f58287615073565b6001909101555081905061460881614f1d565b915050614540565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040902080548015614082576000825561466473ffffffffffffffffffffffffffffffffffffffff841686836144e4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600760205260408120600101805483929061469c908490614f56565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec267978360405161470291815260200190565b60405180910390a35050505050565b60065460005b81811015613d325761475e84846006848154811061473757614737614eee565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16614610565b8061476881614f1d565b915050614717565b60006147d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148ec9092919063ffffffff16565b805190915015611b6457808060200190518101906147f0919061512b565b611b64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a16565b60065460005b81811015611b64576000836001016000600684815481106148a5576148a5614eee565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902060010155806148e481614f1d565b915050614882565b60606148fb8484600085614905565b90505b9392505050565b606082471015614997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a16565b843b6149ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a16565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614a289190615174565b60006040518083038185875af1925050503d8060008114614a65576040519150601f19603f3d011682016040523d82523d6000602084013e614a6a565b606091505b5091509150612c2a82828660608315614a845750816148fe565b825115614a945782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169190615190565b73ffffffffffffffffffffffffffffffffffffffff81168114613a4857600080fd5b60008060408385031215614afd57600080fd5b8235614b0881614ac8565b946020939093013593505050565b600060208284031215614b2857600080fd5b81356148fe81614ac8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215614b7857600080fd5b8435614b8381614ac8565b93506020850135614b9381614ac8565b925060408501359150606085013567ffffffffffffffff80821115614bb757600080fd5b818701915087601f830112614bcb57600080fd5b813581811115614bdd57614bdd614b33565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715614c2357614c23614b33565b816040528281528a6020848701011115614c3c57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008083601f840112614c7257600080fd5b50813567ffffffffffffffff811115614c8a57600080fd5b6020830191508360208260051b85010111156144dd57600080fd5b60008060208385031215614cb857600080fd5b823567ffffffffffffffff811115614ccf57600080fd5b614cdb85828601614c60565b90969095509350505050565b60008060408385031215614cfa57600080fd5b50508035926020909101359150565b60008060408385031215614d1c57600080fd5b8235614d2781614ac8565b91506020830135614d3781614ac8565b809150509250929050565b600060208284031215614d5457600080fd5b5035919050565b8015158114613a4857600080fd5b600060208284031215614d7b57600080fd5b81356148fe81614d5b565b600080600060408486031215614d9b57600080fd5b833567ffffffffffffffff811115614db257600080fd5b614dbe86828701614c60565b9094509250506020840135614dd281614d5b565b809150509250925092565b600080600060408486031215614df257600080fd5b833567ffffffffffffffff811115614e0957600080fd5b614e1586828701614c60565b909790965060209590950135949350505050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614e695780818660040360031b1b83161692505b505092915050565b600060208284031215614e8357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614ecc57614ecc614e8a565b500190565b600060208284031215614ee357600080fd5b81516148fe81614ac8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f4f57614f4f614e8a565b5060010190565b600082821015614f6857614f68614e8a565b500390565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614f9f57600080fd5b8260051b8083602087013760009401602001938452509192915050565b6020815260006148fb602083018486614f6d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561503957615039614e8a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561506d5761506d614e8a565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ab576150ab614e8a565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826150ee576150ee6150b0565b500490565b604081526000615107604083018587614f6d565b9050826020830152949350505050565b600082615126576151266150b0565b500690565b60006020828403121561513d57600080fd5b81516148fe81614d5b565b60005b8381101561516357818101518382015260200161514b565b83811115613d325750506000910152565b60008251615186818460208701615148565b9190910192915050565b60208152600082518060208401526151af816040850160208701615148565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212207155d86f40831593b637f7bf4ce873eee7f5542c2669dfdba1b76f21af894c4664736f6c63430008090033