60806040523480156200001157600080fd5b50604080518082018252601b81527f506f737420467574757269736d204949202d2054414d4153484949000000000060208083019182528351808501909452600484526314118c9560e21b9084015281519192916200007391600291620004d1565b50805162000089906003906020840190620004d1565b505050620000a6620000a06200032f60201b60201c565b62000333565b6040518060600160405280603681526020016200278c603691398051620000d691600991602090910190620004d1565b50620000f873eb899c3432cb1fde26d2f8a84a644be1099a956c600162000385565b6200011973eb899c3432cb1fde26d2f8a84a644be1099a956c600262000385565b6200013a73a288e8502d71f478dba9f98595eb753ab39c298d600362000385565b6200015b73a288e8502d71f478dba9f98595eb753ab39c298d600462000385565b6200017c73570dc2127f98ce3cf841f3e0038a6257e31f6a4d600562000385565b6200019d73570dc2127f98ce3cf841f3e0038a6257e31f6a4d600662000385565b620001be73b68e6d2238c99f3fb346093a1e76961d4a30829c600762000385565b620001df73b68e6d2238c99f3fb346093a1e76961d4a30829c600862000385565b6200020073b5e1fc4af4dd6ab3282d16499420954b192e1849600962000385565b6200022173b5e1fc4af4dd6ab3282d16499420954b192e1849600a62000385565b6200024273b5e1fc4af4dd6ab3282d16499420954b192e1849600b62000385565b62000263732d09d880cb50c09313c8dcca6b209413d31cc372600c62000385565b62000284732d09d880cb50c09313c8dcca6b209413d31cc372600d62000385565b620002a5732d09d880cb50c09313c8dcca6b209413d31cc372600e62000385565b620002c6735b0c276e9dc16b113b1ee36bfa4f1113750a35a3600f62000385565b620002e7735b0c276e9dc16b113b1ee36bfa4f1113750a35a3601062000385565b62000308735b0c276e9dc16b113b1ee36bfa4f1113750a35a3601162000385565b62000329735b0c276e9dc16b113b1ee36bfa4f1113750a35a3601262000385565b620005db565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620003e15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600460205260409020546001600160a01b031615620004485760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620003d8565b6001600160a01b03821660009081526005602052604081208054600192906200047390849062000577565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054620004df906200059e565b90600052602060002090601f0160209004810192826200050357600085556200054e565b82601f106200051e57805160ff19168380011785556200054e565b828001600101855582156200054e579182015b828111156200054e57825182559160200191906001019062000531565b506200055c92915062000560565b5090565b5b808211156200055c576000815560010162000561565b600082198211156200059957634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620005b357607f821691505b60208210811415620005d557634e487b7160e01b600052602260045260246000fd5b50919050565b6121a180620005eb6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c80635944c753116100d857806395d89b411161008c578063c87b56dd11610066578063c87b56dd1461035d578063e985e9c514610370578063f2fde38b146103b957600080fd5b806395d89b411461032f578063a22cb46514610337578063b88d4fde1461034a57600080fd5b806370a08231116100bd57806370a08231146102e8578063715018a6146103095780638da5cb5b1461031157600080fd5b80635944c753146102c25780636352211e146102d557600080fd5b806323b872dd1161013a57806340c10f191161011457806340c10f191461028957806342842e0e1461029c5780634dcf6ad6146102af57600080fd5b806323b872dd146102245780632a55205a1461023757806330176e131461027657600080fd5b806306fdde031161016b57806306fdde03146101c4578063081812fc146101d9578063095ea7b31461021157600080fd5b806301ffc9a71461018757806304634d8d146101af575b600080fd5b61019a610195366004611b11565b6103cc565b60405190151581526020015b60405180910390f35b6101c26101bd366004611b73565b6103dd565b005b6101cc6103f3565b6040516101a69190611c1c565b6101ec6101e7366004611c2f565b610485565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a6565b6101c261021f366004611c48565b6104b9565b6101c2610232366004611c72565b610617565b61024a610245366004611cae565b61069e565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101a6565b6101c2610284366004611cd0565b610795565b6101c2610297366004611c48565b6107a9565b6101c26102aa366004611c72565b6107bb565b6101c26102bd366004611c2f565b6107d6565b6101c26102d0366004611d42565b610821565b6101ec6102e3366004611c2f565b610834565b6102fb6102f6366004611d7e565b6108a6565b6040519081526020016101a6565b6101c261095a565b60085473ffffffffffffffffffffffffffffffffffffffff166101ec565b6101cc61096e565b6101c2610345366004611d99565b61097d565b6101c2610358366004611e04565b610988565b6101cc61036b366004611c2f565b610a16565b61019a61037e366004611efe565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b6101c26103c7366004611d7e565b610a7d565b60006103d782610b1a565b92915050565b6103e5610b25565b6103ef8282610b8c565b5050565b60606002805461040290611f28565b80601f016020809104026020016040519081016040528092919081815260200182805461042e90611f28565b801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b5050505050905090565b600061049082610cd1565b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006104c482610834565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561056d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806105965750610596813361037e565b6106085760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610564565b6106128383610d42565b505050565b6106213382610de2565b6106935760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610564565b610612838383610ea2565b600082815260016020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692820192909252829161075957506040805180820190915260005473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b60208101516000906127109061077d906bffffffffffffffffffffffff1687611fab565b6107879190612017565b915196919550909350505050565b61079d610b25565b61061260098383611a2c565b6107b1610b25565b6103ef82826110d5565b61061283838360405180602001604052806000815250610988565b6107de610b25565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761080983610a16565b6040516108169190611c1c565b60405180910390a250565b610829610b25565b610612838383611263565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103d75760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610564565b600073ffffffffffffffffffffffffffffffffffffffff82166109315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610564565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b610962610b25565b61096c60006113b9565b565b60606003805461040290611f28565b6103ef338383611430565b6109923383610de2565b610a045760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610564565b610a1084848484611544565b50505050565b6060610a2182610cd1565b6000610a2b6115cd565b90506000815111610a4b5760405180602001604052806000815250610a76565b80610a55846115dc565b604051602001610a6692919061202b565b6040516020818303038152906040525b9392505050565b610a85610b25565b73ffffffffffffffffffffffffffffffffffffffff8116610b0e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610564565b610b17816113b9565b50565b60006103d78261170e565b60085473ffffffffffffffffffffffffffffffffffffffff16331461096c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610564565b6127106bffffffffffffffffffffffff82161115610c125760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610564565b73ffffffffffffffffffffffffffffffffffffffff8216610c755760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610564565b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600055565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16610b175760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610564565b600081815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610d9c82610834565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610dee83610834565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610e5c575073ffffffffffffffffffffffffffffffffffffffff80821660009081526007602090815260408083209388168352929052205460ff165b80610e9a57508373ffffffffffffffffffffffffffffffffffffffff16610e8284610485565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610ec282610834565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610564565b73ffffffffffffffffffffffffffffffffffffffff8216610fd35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610564565b610fde600082610d42565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260056020526040812080546001929061101490849061205a565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080546001929061104f908490612071565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b73ffffffffffffffffffffffffffffffffffffffff82166111385760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610564565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16156111aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610564565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081208054600192906111e0908490612071565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6127106bffffffffffffffffffffffff821611156112e95760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610564565b73ffffffffffffffffffffffffffffffffffffffff821661134c5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610564565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff93841681526bffffffffffffffffffffffff9283166020808301918252600096875260019052919094209351905190911674010000000000000000000000000000000000000000029116179055565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114ac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610564565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526007602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61154f848484610ea2565b61155b848484846117b0565b610a105760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610564565b60606009805461040290611f28565b60608161161c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611646578061163081612089565b915061163f9050600a83612017565b9150611620565b60008167ffffffffffffffff81111561166157611661611dd5565b6040519080825280601f01601f19166020018201604052801561168b576020820181803683370190505b5090505b8415610e9a576116a060018361205a565b91506116ad600a866120c2565b6116b8906030612071565b60f81b8183815181106116cd576116cd6120d6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611707600a86612017565b945061168f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806117a157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806103d757506103d782611995565b600073ffffffffffffffffffffffffffffffffffffffff84163b1561198a576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611827903390899088908890600401612105565b602060405180830381600087803b15801561184157600080fd5b505af192505050801561188f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261188c9181019061214e565b60015b61193f573d8080156118bd576040519150601f19603f3d011682016040523d82523d6000602084013e6118c2565b606091505b5080516119375760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610564565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610e9a565b506001949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806103d757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103d7565b828054611a3890611f28565b90600052602060002090601f016020900481019282611a5a5760008555611abe565b82601f10611a91578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611abe565b82800160010185558215611abe579182015b82811115611abe578235825591602001919060010190611aa3565b50611aca929150611ace565b5090565b5b80821115611aca5760008155600101611acf565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b1757600080fd5b600060208284031215611b2357600080fd5b8135610a7681611ae3565b803573ffffffffffffffffffffffffffffffffffffffff81168114611b5257600080fd5b919050565b80356bffffffffffffffffffffffff81168114611b5257600080fd5b60008060408385031215611b8657600080fd5b611b8f83611b2e565b9150611b9d60208401611b57565b90509250929050565b60005b83811015611bc1578181015183820152602001611ba9565b83811115610a105750506000910152565b60008151808452611bea816020860160208601611ba6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a766020830184611bd2565b600060208284031215611c4157600080fd5b5035919050565b60008060408385031215611c5b57600080fd5b611c6483611b2e565b946020939093013593505050565b600080600060608486031215611c8757600080fd5b611c9084611b2e565b9250611c9e60208501611b2e565b9150604084013590509250925092565b60008060408385031215611cc157600080fd5b50508035926020909101359150565b60008060208385031215611ce357600080fd5b823567ffffffffffffffff80821115611cfb57600080fd5b818501915085601f830112611d0f57600080fd5b813581811115611d1e57600080fd5b866020828501011115611d3057600080fd5b60209290920196919550909350505050565b600080600060608486031215611d5757600080fd5b83359250611d6760208501611b2e565b9150611d7560408501611b57565b90509250925092565b600060208284031215611d9057600080fd5b610a7682611b2e565b60008060408385031215611dac57600080fd5b611db583611b2e565b915060208301358015158114611dca57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611e1a57600080fd5b611e2385611b2e565b9350611e3160208601611b2e565b925060408501359150606085013567ffffffffffffffff80821115611e5557600080fd5b818701915087601f830112611e6957600080fd5b813581811115611e7b57611e7b611dd5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ec157611ec1611dd5565b816040528281528a6020848701011115611eda57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611f1157600080fd5b611f1a83611b2e565b9150611b9d60208401611b2e565b600181811c90821680611f3c57607f821691505b60208210811415611f76577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611fe357611fe3611f7c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261202657612026611fe8565b500490565b6000835161203d818460208801611ba6565b835190830190612051818360208801611ba6565b01949350505050565b60008282101561206c5761206c611f7c565b500390565b6000821982111561208457612084611f7c565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156120bb576120bb611f7c565b5060010190565b6000826120d1576120d1611fe8565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526121446080830184611bd2565b9695505050505050565b60006020828403121561216057600080fd5b8151610a7681611ae356fea2646970667358221220dd328b92f6ea65330cb319df8d2a41f5ab328c681fc375cfb3eade68af6889e464736f6c63430008090033697066733a2f2f516d65684861764b6b75626451447446314456456379316957695657455038356a4439367756315a4447555a58592f