608060405234801561001057600080fd5b50611d27806100206000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636e96dfd7116100f9578063a9059cbb11610097578063d505accf11610071578063d505accf1461077f578063dd62ed3e146107d0578063e30c3978146107fe578063fc4d33f914610806576101a9565b8063a9059cbb1461060b578063b84c824614610637578063c47f0027146106db576101a9565b80638da5cb5b116100d35780638da5cb5b1461058757806395d89b41146105ab5780639dc29fac146105b3578063a457c2d7146105df576101a9565b80636e96dfd71461051557806370a082311461053b5780637ecebe0014610561576101a9565b806323b872dd116101665780633644e515116101405780633644e5151461045d578063395093511461046557806340c10f19146104915780636b32810b146104bd576101a9565b806323b872dd1461040157806330adf81f14610437578063313ce5671461043f576101a9565b806303c7bce1146101ae57806306fdde03146101d6578063095ea7b3146102535780631624f6c61461029357806318160ddd146103c1578063210c5a56146103db575b600080fd5b6101d4600480360360208110156101c457600080fd5b50356001600160a01b031661080e565b005b6101de6108f1565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610218578181015183820152602001610200565b50505050905090810190601f1680156102455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027f6004803603604081101561026957600080fd5b506001600160a01b03813516906020013561097f565b604080519115158252519081900360200190f35b6101d4600480360360608110156102a957600080fd5b810190602081018135600160201b8111156102c357600080fd5b8201836020820111156102d557600080fd5b803590602001918460018302840111600160201b831117156102f657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561034857600080fd5b82018360208201111561035a57600080fd5b803590602001918460018302840111600160201b8311171561037b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506109969050565b6103c9610a93565b60408051918252519081900360200190f35b6101d4600480360360208110156103f157600080fd5b50356001600160a01b0316610a99565b61027f6004803603606081101561041757600080fd5b506001600160a01b03813581169160208101359091169060400135610b7b565b6103c9610bcc565b610447610bf0565b6040805160ff9092168252519081900360200190f35b6103c9610bf9565b61027f6004803603604081101561047b57600080fd5b506001600160a01b038135169060200135610bff565b6101d4600480360360408110156104a757600080fd5b506001600160a01b038135169060200135610c35565b6104c5610c9f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105015781810151838201526020016104e9565b505050509050019250505060405180910390f35b6101d46004803603602081101561052b57600080fd5b50356001600160a01b0316610d3a565b6103c96004803603602081101561055157600080fd5b50356001600160a01b0316610e3b565b6103c96004803603602081101561057757600080fd5b50356001600160a01b0316610e4d565b61058f610e5f565b604080516001600160a01b039092168252519081900360200190f35b6101de610e73565b6101d4600480360360408110156105c957600080fd5b506001600160a01b038135169060200135610ece565b61027f600480360360408110156105f557600080fd5b506001600160a01b038135169060200135610ed8565b61027f6004803603604081101561062157600080fd5b506001600160a01b038135169060200135610f0e565b6101d46004803603602081101561064d57600080fd5b810190602081018135600160201b81111561066757600080fd5b82018360208201111561067957600080fd5b803590602001918460018302840111600160201b8311171561069a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f1b945050505050565b6101d4600480360360208110156106f157600080fd5b810190602081018135600160201b81111561070b57600080fd5b82018360208201111561071d57600080fd5b803590602001918460018302840111600160201b8311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f2e945050505050565b6101d4600480360360e081101561079557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f41565b6103c9600480360360408110156107e657600080fd5b506001600160a01b0381358116916020013516611184565b61058f6111a1565b6101d46111b0565b60005461010090046001600160a01b0316331461085c5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1d6022913960400191505060405180910390fd5b6001600160a01b0381166108a15760405162461bcd60e51b8152600401808060200182810382526024815260200180611ca96024913960400191505060405180910390fd5b6108ac606e826112a7565b156108ee57604080516001600160a01b038316815290517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69181900360200190a15b50565b6037805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b505050505081565b600061098c3384846112c3565b5060015b92915050565b60005460ff16156109d85760405162461bcd60e51b815260040180806020018281038252602e815260200180611bef602e913960400191505060405180910390fd5b6109e06113af565b6109eb8383836113f7565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8380519060200120604051806040016040528060018152602001603160f81b81525080519060200120610a3d611437565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120606c5550506000805460ff1916600117905550565b60365481565b60005461010090046001600160a01b03163314610ae75760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1d6022913960400191505060405180910390fd5b6001600160a01b038116610b2c5760405162461bcd60e51b8152600401808060200182810382526027815260200180611bc86027913960400191505060405180910390fd5b610b37606e8261143b565b156108ee57604080516001600160a01b038316815290517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929181900360200190a150565b6000610b88848484611450565b6001600160a01b038416600090815260356020908152604080832033808552925290912054610bc2918691610bbd9086611588565b6112c3565b5060019392505050565b7f576144ed657c8304561e56ca632e17751956250114636e8c01f64a7f2c6d98cf81565b60395460ff1681565b606c5481565b3360008181526035602090815260408083206001600160a01b0387168452909152812054909161098c918590610bbd90866115ca565b610c40606e33611624565b610c91576040805162461bcd60e51b815260206004820181905260248201527f6f6e6c794d696e7465723a2063616c6c6572206973206e6f74206d696e746572604482015290519081900360640190fd5b610c9b8282611639565b5050565b60606000610cad606e61171f565b90508067ffffffffffffffff81118015610cc657600080fd5b50604051908082528060200260200182016040528015610cf0578160200160208202803683370190505b50915060005b81811015610d3557610d09606e8261172a565b838281518110610d1557fe5b6001600160a01b0390921660209283029190910190910152600101610cf6565b505090565b60005461010090046001600160a01b03163314610d885760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1d6022913960400191505060405180910390fd5b6001600160a01b03811615801590610dae57506001546001600160a01b03828116911614155b610de95760405162461bcd60e51b815260040180806020018281038252604b815260200180611b5b604b913960600191505060405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b60346020526000908152604090205481565b606d6020526000908152604090205481565b60005461010090046001600160a01b031681565b6038805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109775780601f1061094c57610100808354040283529160200191610977565b610c9b8282611736565b3360008181526035602090815260408083206001600160a01b0387168452909152812054909161098c918590610bbd9086611588565b600061098c338484611450565b8051610c9b906038906020840190611a82565b8051610c9b906037906020840190611a82565b42841015610f89576040805162461bcd60e51b815260206004820152601060248201526f7065726d69743a20455850495245442160801b604482015290519081900360640190fd5b6001600160a01b0387166000908152606d6020526040812054606c549091907f576144ed657c8304561e56ca632e17751956250114636e8c01f64a7f2c6d98cf8a8a610fd3611437565b604080516020808201969096526001600160a01b0394851681830152929093166060830152608082015260a081018b905260c0810186905260e08082018b9052825180830390910181526101008201835280519084012061190160f01b61012083015261012282019490945261014280820194909452815180820390940184526101628101808352845194840194909420600094859052610182820180845281905260ff8a166101a28301526101c282018990526101e282018890529151919450600192610202808301939192601f198301929081900390910190855afa1580156110c2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906110f85750896001600160a01b0316816001600160a01b0316145b611149576040805162461bcd60e51b815260206004820152601a60248201527f7065726d69743a20494e56414c49445f5349474e415455524521000000000000604482015290519081900360640190fd5b6111548360016115ca565b6001600160a01b038b166000908152606d60205260409020556111788a8a8a6112c3565b50505050505050505050565b603560209081526000928352604080842090915290825290205481565b6001546001600160a01b031681565b6001546001600160a01b031633146111f95760405162461bcd60e51b8152600401808060200182810382526025815260200180611ccd6025913960400191505060405180910390fd5b60008054600180546001600160a01b03818116610100818102610100600160a81b03198716178088556001600160a01b031990941690945560405194849004821695909493909204169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b60006112bc836001600160a01b038416611785565b9392505050565b6001600160a01b0383166113085760405162461bcd60e51b8152600401808060200182810382526024815260200180611c856024913960400191505060405180910390fd5b6001600160a01b03821661134d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ba66022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008054610100600160a81b0319163361010081029190911782556040519091907f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364908290a3565b825161140a906037906020860190611a82565b50815161141e906038906020850190611a82565b506039805460ff191660ff929092169190911790555050565b4690565b60006112bc836001600160a01b0384166117cf565b6001600160a01b0383166114955760405162461bcd60e51b8152600401808060200182810382526025815260200180611c606025913960400191505060405180910390fd5b6001600160a01b0382166114da5760405162461bcd60e51b8152600401808060200182810382526023815260200180611b386023913960400191505060405180910390fd5b6001600160a01b0383166000908152603460205260409020546114fd9082611588565b6001600160a01b03808516600090815260346020526040808220939093559084168152205461152c90826115ca565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60006112bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611895565b6000828201838110156112bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006112bc836001600160a01b03841661192c565b6001600160a01b038216611694576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6036546116a190826115ca565b6036556001600160a01b0382166000908152603460205260409020546116c790826115ca565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600061099082611944565b60006112bc8383611948565b336001600160a01b0383161461177b576001600160a01b03821660009081526035602090815260408083203380855292529091205461177b918491610bbd9085611588565b610c9b82826119ac565b6000611791838361192c565b6117c757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610990565b506000610990565b6000818152600183016020526040812054801561188b578354600019808301919081019060009087908390811061180257fe5b906000526020600020015490508087600001848154811061181f57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061184f57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610990565b6000915050610990565b600081848411156119245760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118e95781810151838201526020016118d1565b50505050905090810190601f1680156119165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60009081526001919091016020526040902054151590565b5490565b8154600090821061198a5760405162461bcd60e51b8152600401808060200182810382526022815260200180611b166022913960400191505060405180910390fd5b82600001828154811061199957fe5b9060005260206000200154905092915050565b6001600160a01b0382166119f15760405162461bcd60e51b8152600401808060200182810382526021815260200180611c3f6021913960400191505060405180910390fd5b6001600160a01b038216600090815260346020526040902054611a149082611588565b6001600160a01b038316600090815260346020526040902055603654611a3a9082611588565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ac357805160ff1916838001178555611af0565b82800160010185558215611af0579182015b82811115611af0578251825591602001919060010190611ad5565b50611afc929150611b00565b5090565b5b80821115611afc5760008155600101611b0156fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f20616464726573735f73657450656e64696e674f776e65723a204e6577206f77656e722063616e206e6f74206265207a65726f206164647265737320616e64206f776e657220686173206265656e207365742145524332303a20617070726f766520746f20746865207a65726f20616464726573735f72656d6f76654d696e7465723a205f6d696e74657220746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65646f6e6c794f776e65723a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735f6164644d696e7465723a205f6d696e74657220746865207a65726f20616464726573735f6163636570744f776e65723a204f6e6c7920666f722070656e64696e67206f776e657221a2646970667358221220adeecca42e2e7b0faf5917feb5c79ba30ec02beb2395dea42da08e9f8a3c3cf864736f6c634300060c0033