60806040523480156200001157600080fd5b50604051620043aa380380620043aa83398101604081905262000034916200034c565b604080518082018252600e81527f4d69646e69676874427265657a6500000000000000000000000000000000000060208083019182528351808501909452600384527f4d4e420000000000000000000000000000000000000000000000000000000000908401528151919291620000ae91600091620002a6565b508051620000c4906001906020840190620002a6565b5050600b805460ff1916905550620000f7620000e864010000000062000159810204565b6401000000006200015d810204565b66f5232269808000600d55600e829055600f8190556011805461ff0160b060020a03191633620100000217905562000137640100000000620001b7810204565b62000151600c640100000000620024106200029482021704565b5050620003c7565b3390565b600b8054600160a060020a0383811661010081810261010060a860020a031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001ca6401000000006200029d810204565b1562000236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640160405180910390fd5b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200027764010000000062000159810204565b604051600160a060020a03909116815260200160405180910390a1565b80546001019055565b600b5460ff1690565b828054620002b49062000371565b90600052602060002090601f016020900481019282620002d8576000855562000323565b82601f10620002f357805160ff191683800117855562000323565b8280016001018555821562000323579182015b828111156200032357825182559160200191906001019062000306565b506200033192915062000335565b5090565b5b8082111562000331576000815560010162000336565b600080604083850312156200036057600080fd5b505080516020909101519092909150565b6002810460018216806200038657607f821691505b60208210811415620003c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b613fd380620003d76000396000f3fe608060405260043610610251576000357c0100000000000000000000000000000000000000000000000000000000900480635c975abb11610155578063a22cb465116100cd578063c87b56dd1161009c578063d700322211610081578063d700322214610672578063e985e9c514610687578063f2fde38b146106dd57600080fd5b8063c87b56dd14610632578063cb2432a71461065257600080fd5b8063a22cb465146105bf578063b31d61b0146105df578063b59e0ad5146105ff578063b88d4fde1461061257600080fd5b806370a08231116101245780638456cb59116101095780638456cb59146105655780638da5cb5b1461057a57806395d89b41146105aa57600080fd5b806370a0823114610530578063715018a61461055057600080fd5b80635c975abb146104b8578063627804af146104d05780636352211e146104f05780636e792b181461051057600080fd5b80632f745c59116101e857806342842e0e116101b75780634abfc6b91161019c5780634abfc6b9146104635780634f6ccce71461047857806355f804b31461049857600080fd5b806342842e0e1461042357806349df728c1461044357600080fd5b80632f745c59146103b9578063380d831b146103d95780633ccfd60b146103ee578063415665851461040357600080fd5b806318160ddd1161022457806318160ddd1461031457806318b32b51146103335780631d7504bb1461037957806323b872dd1461039957600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102f2575b600080fd5b34801561026257600080fd5b50610276610271366004613901565b6106fd565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a061070e565b6040516102829190613976565b3480156102b957600080fd5b506102cd6102c8366004613989565b6107a0565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610282565b3480156102fe57600080fd5b5061031261030d3660046139c4565b61087f565b005b34801561032057600080fd5b506008545b604051908152602001610282565b34801561033f57600080fd5b5061027661034e3660046139f0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526013602052604090205460ff1690565b34801561038557600080fd5b506102766103943660046139f0565b610a0c565b3480156103a557600080fd5b506103126103b4366004613a0d565b610a7e565b3480156103c557600080fd5b506103256103d43660046139c4565b610b1f565b3480156103e557600080fd5b50610312610bee565b3480156103fa57600080fd5b50610312610e42565b34801561040f57600080fd5b5061031261041e3660046139f0565b610f5d565b34801561042f57600080fd5b5061031261043e366004613a0d565b611015565b34801561044f57600080fd5b5061031261045e3660046139f0565b611030565b34801561046f57600080fd5b50610312611220565b34801561048457600080fd5b50610325610493366004613989565b611368565b3480156104a457600080fd5b506103126104b3366004613b06565b611426565b3480156104c457600080fd5b50600b5460ff16610276565b3480156104dc57600080fd5b506103126104eb3660046139c4565b6114f1565b3480156104fc57600080fd5b506102cd61050b366004613989565b61175f565b34801561051c57600080fd5b5061031261052b366004613b06565b611811565b34801561053c57600080fd5b5061032561054b3660046139f0565b6119e1565b34801561055c57600080fd5b50610312611aaf565b34801561057157600080fd5b50610312611b42565b34801561058657600080fd5b50600b54610100900473ffffffffffffffffffffffffffffffffffffffff166102cd565b3480156105b657600080fd5b506102a0611c64565b3480156105cb57600080fd5b506103126105da366004613b5d565b611c73565b3480156105eb57600080fd5b506103126105fa366004613b96565b611d6c565b61031261060d366004613989565b611e68565b34801561061e57600080fd5b5061031261062d366004613c47565b6121a1565b34801561063e57600080fd5b506102a061064d366004613989565b612243565b34801561065e57600080fd5b5061031261066d366004613989565b61224e565b34801561067e57600080fd5b50600d54610325565b34801561069357600080fd5b506102766106a2366004613cc7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106e957600080fd5b506103126106f83660046139f0565b6122da565b600061070882612419565b92915050565b60606000805461071d90613cf5565b80601f016020809104026020016040519081016040528092919081815260200182805461074990613cf5565b80156107965780601f1061076b57610100808354040283529160200191610796565b820191906000526020600020905b81548152906001019060200180831161077957829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061088a8261175f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161084d565b3373ffffffffffffffffffffffffffffffffffffffff82161480610971575061097181336106a2565b6109fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084d565b610a07838361246f565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205460ff168015610a67575073ffffffffffffffffffffffffffffffffffffffff821660009081526013602052604090205460ff16155b80610708575050601154610100900460ff16919050565b610a88338261250f565b610b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161084d565b610a0783838361267f565b6000610b2a836119e1565b8210610bb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015260840161084d565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314610c75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60115460ff1615610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616c6520636c6f7365642e20416374696f6e2063616e6e6f7420626520636f60448201527f6d706c6574656400000000000000000000000000000000000000000000000000606482015260840161084d565b600b5460ff1615610d75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f63616e6e6f7420636c6f73652073616c65207768696c73742070617573656400604482015260640161084d565b600854600f5414610e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f63616e6e6f7420636c6f73652073616c65206265666f7265206974277320736f60448201527f6c64206f75740000000000000000000000000000000000000000000000000000606482015260840161084d565b6011805460ff1916600117905560405133907f017c3c67596bf3765531204f6eae2365a257d386c769dbbe71a191da149e861090600090a2565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314610ec9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b30316000610ed882600a6128f1565b9050336108fc610ee88484612904565b6040518115909202916000818181858888f19350505050158015610f10573d6000803e3d6000fd5b506011546040516201000090910473ffffffffffffffffffffffffffffffffffffffff16906108fc8315029083906000818181858888f19350505050158015610a07573d6000803e3d6000fd5b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b73ffffffffffffffffffffffffffffffffffffffff166000908152601260205260409020805460ff19166001179055565b610a07838383604051806020016040528060008152506121a1565b600b5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146110b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b73ffffffffffffffffffffffffffffffffffffffff81166110d757600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b15801561113f57600080fd5b505afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190613d49565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810182905290915073ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb90604401602060405180830381600087803b1580156111e857600080fd5b505af11580156111fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a079190613d62565b600b5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60115460ff161561133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616c6520636c6f7365642e20416374696f6e2063616e6e6f7420626520636f60448201527f6d706c6574656400000000000000000000000000000000000000000000000000606482015260840161084d565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b600061137360085490565b8210611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015260840161084d565b6008828154811061141457611414613d7f565b90600052602060002001549050919050565b600b5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146114ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60006114bb600b5460ff1690565b905080156114cb576114cb612910565b81516114de90601090602085019061383a565b5080156114ed576114ed6129d3565b5050565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60115460ff161561160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616c6520636c6f7365642e20416374696f6e2063616e6e6f7420626520636f60448201527f6d706c6574656400000000000000000000000000000000000000000000000000606482015260840161084d565b600f54600c541115611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f536f6c64206f7574212100000000000000000000000000000000000000000000604482015260640161084d565b600b5460ff1661170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920646576206d696e74207768656e20636f6e74726163742060448201527f6973207061757365640000000000000000000000000000000000000000000000606482015260840161084d565b611713612910565b60005b61172883611723600c5490565b612a75565b611736600c80546001019055565b8061174081613ddd565b91505081811080156117535750600e5481105b61171657610a07611b42565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161084d565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60115460ff161561192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616c6520636c6f7365642e20416374696f6e2063616e6e6f7420626520636f60448201527f6d706c6574656400000000000000000000000000000000000000000000000000606482015260840161084d565b600b5460ff16611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f53616c6520697320616c7265616479206f70656e000000000000000000000000604482015260640161084d565b80516119aa90601090602084019061383a565b506119b3612910565b60405133907f18cf0e1dac2db2ed720cf9c5f3e00ed92af694f6e105b89958a19448e415bfca90600090a250565b600073ffffffffffffffffffffffffffffffffffffffff8216611a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161084d565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314611b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b611b406000612a8f565b565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314611bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60115460ff1615611c5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616c6520636c6f7365642e20416374696f6e2063616e6e6f7420626520636f60448201527f6d706c6574656400000000000000000000000000000000000000000000000000606482015260840161084d565b611b406129d3565b60606001805461071d90613cf5565b73ffffffffffffffffffffffffffffffffffffffff8216331415611cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084d565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314611df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b60005b81518110156114ed57600160126000848481518110611e1757611e17613d7f565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600020805460ff191691151591909117905580611e6081613ddd565b915050611df6565b60008111611ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d757374206d696e74206d6f7265207468616e203020746f6b656e7321000000604482015260640161084d565b600f54600c541115611f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f416c6c20746f6b656e7320736f6c642100000000000000000000000000000000604482015260640161084d565b600d54611f4e908290612b0d565b3414611fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f57726f6e672045544820616d6f756e7421000000000000000000000000000000604482015260640161084d565b600e54811115612022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f43616e2774206d696e74206d6f7265207468616e206d61782100000000000000604482015260640161084d565b61202b33610a0c565b6120dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4e6f742077686974656c69737465642c20757365642077686974656c6973742060448201527f6d696e74206f72204f70656e2053616c6520686173206e6f742073746172746560648201527f6421000000000000000000000000000000000000000000000000000000000000608482015260a40161084d565b60005b806120ea81613ddd565b601154909250610100900460ff16905061211957336000908152601360205260409020805460ff191660011790555b61212633611723600c5490565b612134600c80546001019055565b81811080156121475750600f54600c5411155b6120e05760006121578383612904565b90508015610a0757600d5433906108fc90612173908490612b0d565b6040518115909202916000818181858888f1935050505015801561219b573d6000803e3d6000fd5b50505050565b6121ab338361250f565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161084d565b61219b84848484612b19565b606061070882612bbc565b600b5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146122d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b600d55565b600b5473ffffffffffffffffffffffffffffffffffffffff610100909104163314612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084d565b73ffffffffffffffffffffffffffffffffffffffff8116612404576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161084d565b61240d81612a8f565b50565b80546001019055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610708575061070882612d61565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906124c98261175f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166125c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161084d565b60006125cb8361175f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061263a57508373ffffffffffffffffffffffffffffffffffffffff16612622846107a0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612677575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661269f8261175f565b73ffffffffffffffffffffffffffffffffffffffff1614612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015260840161084d565b73ffffffffffffffffffffffffffffffffffffffff82166127e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161084d565b6127ef838383612e44565b6127fa60008261246f565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612830908490613e16565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080546001929061286b908490613e2d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006128fd8284613e74565b9392505050565b60006128fd8284613e16565b600b5460ff1661297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161084d565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600b5460ff1615612a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161084d565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129a93390565b6114ed828260405180602001604052806000815250612ebc565b600b805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006128fd8284613e88565b612b2484848461267f565b612b3084848484612f5f565b61219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161084d565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16612c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000606482015260840161084d565b6000828152600a602052604081208054612c8990613cf5565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb590613cf5565b8015612d025780601f10612cd757610100808354040283529160200191612d02565b820191906000526020600020905b815481529060010190602001808311612ce557829003601f168201915b505050505090506000612d13613140565b9050805160001415612d26575092915050565b815115612d58578082604051602001612d40929190613ec5565b60405160208183030381529060405292505050919050565b6126778461314f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612df457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061070857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610708565b600b5460ff1615612eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161084d565b610a0783838361325e565b612ec68383613364565b612ed36000848484612f5f565b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161084d565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613135576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612fd6903390899088908890600401613ef4565b602060405180830381600087803b158015612ff057600080fd5b505af1925050508015613020575060408051601f3d908101601f1916820190925261301d91810190613f3d565b60015b6130ea573d80801561304e576040519150601f19603f3d011682016040523d82523d6000602084013e613053565b606091505b5080516130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161084d565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612677565b506001949350505050565b60606010805461071d90613cf5565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16613203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606482015260840161084d565b600061320d613140565b9050600081511161322d57604051806020016040528060008152506128fd565b8061323784613532565b604051602001613248929190613ec5565b6040516020818303038152906040529392505050565b73ffffffffffffffffffffffffffffffffffffffff83166132c6576132c181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613303565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613303576133038382613683565b73ffffffffffffffffffffffffffffffffffffffff821661332757610a078161373a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a0757610a0782826137e9565b73ffffffffffffffffffffffffffffffffffffffff82166133e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084d565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff161561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084d565b61347960008383612e44565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906134af908490613e2d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161357257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561359c578061358681613ddd565b91506135959050600a83613e74565b9150613576565b60008167ffffffffffffffff8111156135b7576135b7613a4e565b6040519080825280601f01601f1916602001820160405280156135e1576020820181803683370190505b5090505b8415612677576135f6600183613e16565b9150613603600a86613f5a565b61360e906030613e2d565b7f01000000000000000000000000000000000000000000000000000000000000000281838151811061364257613642613d7f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061367c600a86613e74565b94506135e5565b60006001613690846119e1565b61369a9190613e16565b6000838152600760205260409020549091508082146136fa5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b60085460009061374c90600190613e16565b6000838152600960205260408120546008805493945090928490811061377457613774613d7f565b90600052602060002001549050806008838154811061379557613795613d7f565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806137cd576137cd613f6e565b6001900381819060005260206000200160009055905550505050565b60006137f4836119e1565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461384690613cf5565b90600052602060002090601f01602090048101928261386857600085556138ae565b82601f1061388157805160ff19168380011785556138ae565b828001600101855582156138ae579182015b828111156138ae578251825591602001919060010190613893565b506138ba9291506138be565b5090565b5b808211156138ba57600081556001016138bf565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461240d57600080fd5b60006020828403121561391357600080fd5b81356128fd816138d3565b60005b83811015613939578181015183820152602001613921565b8381111561219b5750506000910152565b6000815180845261396281602086016020860161391e565b601f01601f19169290920160200192915050565b6020815260006128fd602083018461394a565b60006020828403121561399b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461240d57600080fd5b600080604083850312156139d757600080fd5b82356139e2816139a2565b946020939093013593505050565b600060208284031215613a0257600080fd5b81356128fd816139a2565b600080600060608486031215613a2257600080fd5b8335613a2d816139a2565b92506020840135613a3d816139a2565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613aa657613aa6613a4e565b604052919050565b600067ffffffffffffffff831115613ac857613ac8613a4e565b613adb6020601f19601f86011601613a7d565b9050828152838383011115613aef57600080fd5b828260208301376000602084830101529392505050565b600060208284031215613b1857600080fd5b813567ffffffffffffffff811115613b2f57600080fd5b8201601f81018413613b4057600080fd5b61267784823560208401613aae565b801515811461240d57600080fd5b60008060408385031215613b7057600080fd5b8235613b7b816139a2565b91506020830135613b8b81613b4f565b809150509250929050565b60006020808385031215613ba957600080fd5b823567ffffffffffffffff80821115613bc157600080fd5b818501915085601f830112613bd557600080fd5b813581811115613be757613be7613a4e565b8381029150613bf7848301613a7d565b8181529183018401918481019088841115613c1157600080fd5b938501935b83851015613c3b5784359250613c2b836139a2565b8282529385019390850190613c16565b98975050505050505050565b60008060008060808587031215613c5d57600080fd5b8435613c68816139a2565b93506020850135613c78816139a2565b925060408501359150606085013567ffffffffffffffff811115613c9b57600080fd5b8501601f81018713613cac57600080fd5b613cbb87823560208401613aae565b91505092959194509250565b60008060408385031215613cda57600080fd5b8235613ce5816139a2565b91506020830135613b8b816139a2565b600281046001821680613d0957607f821691505b60208210811415613d43577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613d5b57600080fd5b5051919050565b600060208284031215613d7457600080fd5b81516128fd81613b4f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e0f57613e0f613dae565b5060010190565b600082821015613e2857613e28613dae565b500390565b60008219821115613e4057613e40613dae565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613e8357613e83613e45565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ec057613ec0613dae565b500290565b60008351613ed781846020880161391e565b835190830190613eeb81836020880161391e565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613f33608083018461394a565b9695505050505050565b600060208284031215613f4f57600080fd5b81516128fd816138d3565b600082613f6957613f69613e45565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212206efe8d35780d57de18272adf9a5c4c755b438ce65297f8d2a3e9a6e383f28c0864736f6c63430008090033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000001b39