0x608060405234801561001057600080fd5b506149f7806100206000396000f3fe6080604052600436106103b15760003560e01c80638b83209b116101e7578063c45ac0501161010d578063d79779b2116100a0578063e919ecad1161006f578063e919ecad14610bf1578063e985e9c514610c08578063f2fde38b14610c28578063f7073c3a14610c4857600080fd5b8063d79779b214610b38578063da19480914610b6f578063e33b7de314610b8f578063e4ab4bb914610ba557600080fd5b8063ce3cd997116100dc578063ce3cd99714610ab9578063ce7c2ac214610ad9578063d2cab05614610b10578063d5abeb0114610b2357600080fd5b8063c45ac05014610a39578063c519cd1c14610a59578063c87b56dd14610a79578063cb3afdb614610a9957600080fd5b8063a3f8eace11610185578063b7fafcd711610154578063b7fafcd7146109a0578063b88d4fde146109d1578063c040e6b8146109e4578063c23dc68f14610a0c57600080fd5b8063a3f8eace146108fe578063a49340cc1461091e578063ad0127f01461093e578063b1ba72d61461096f57600080fd5b806395d89b41116101c157806395d89b41146108725780639852595c1461088757806399a2557a146108be578063a22cb465146108de57600080fd5b80638b83209b146108145780638c7ea24b146108345780638da5cb5b1461085457600080fd5b806342842e0e116102d75780636dba11631161026a57806375d5ae9f1161023957806375d5ae9f1461079257806375dadb32146107b25780638462151c146107c757806385cb593b146107f457600080fd5b80636dba11631461071d5780636f8b44b01461073d57806370a082311461075d578063715018a61461077d57600080fd5b80635be7fde8116102a65780635be7fde8146106a85780635ee54e23146106bd5780636352211e146106dd5780636a00670b146106fd57600080fd5b806342842e0e1461062857806348b750441461063b578063580fc80a1461065b5780635bbb21771461067b57600080fd5b806323b872dd1161034f5780632db115441161031e5780632db11544146105985780632f59f741146105ab5780633a98ef39146105cb578063406072a9146105e157600080fd5b806323b872dd14610506578063240ff27f1461051957806324d7806c146105395780632a55205a1461055957600080fd5b8063095ea7b31161038b578063095ea7b31461048e57806318160ddd146104a357806319165587146104c657806321a588de146104e657600080fd5b806301ffc9a7146103ff57806306fdde0314610434578063081812fc1461045657600080fd5b366103fa577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561040b57600080fd5b5061041f61041a3660046141bf565b610c5d565b60405190151581526020015b60405180910390f35b34801561044057600080fd5b50610449610c7d565b60405161042b919061463e565b34801561046257600080fd5b506104766104713660046142b0565b610d18565b6040516001600160a01b03909116815260200161042b565b6104a161049c366004613fb3565b610d65565b005b3480156104af57600080fd5b506104b8610d75565b60405190815260200161042b565b3480156104d257600080fd5b506104a16104e1366004613e37565b610d95565b3480156104f257600080fd5b506104a16105013660046143d3565b610e86565b6104a1610514366004613e8b565b610f45565b34801561052557600080fd5b506104a1610534366004613f86565b611135565b34801561054557600080fd5b5061041f610554366004613e37565b611185565b34801561056557600080fd5b50610579610574366004614329565b6111a3565b604080516001600160a01b03909316835260208301919091520161042b565b6104a16105a63660046142b0565b6111f9565b3480156105b757600080fd5b506104a16105c63660046143d3565b6112b1565b3480156105d757600080fd5b506101c5546104b8565b3480156105ed57600080fd5b506104b86105fc3660046141f7565b6001600160a01b0391821660009081526101cb6020908152604080832093909416825291909152205490565b6104a1610636366004613e8b565b611360565b34801561064757600080fd5b506104a16106563660046141f7565b611380565b34801561066757600080fd5b506104a1610676366004613e37565b611491565b34801561068757600080fd5b5061069b61069636600461407a565b6114bf565b60405161042b919061459c565b3480156106b457600080fd5b506104a16115b4565b3480156106c957600080fd5b506104a16106d836600461440a565b6115e4565b3480156106e957600080fd5b506104766106f83660046142b0565b611620565b34801561070957600080fd5b506104a161071836600461440a565b61162b565b34801561072957600080fd5b506104b8610738366004614364565b611667565b34801561074957600080fd5b506104a16107583660046142b0565b6116ac565b34801561076957600080fd5b506104b8610778366004613e37565b6116d6565b34801561078957600080fd5b506104a161173e565b34801561079e57600080fd5b506104a16107ad366004614244565b611752565b3480156107be57600080fd5b50610449611784565b3480156107d357600080fd5b506107e76107e2366004613e37565b611794565b60405161042b91906145de565b34801561080057600080fd5b506104a161080f366004614244565b6118bf565b34801561082057600080fd5b5061047661082f3660046142b0565b6118f1565b34801561084057600080fd5b506104a161084f366004613fb3565b611930565b34801561086057600080fd5b506033546001600160a01b0316610476565b34801561087e57600080fd5b5061044961195f565b34801561089357600080fd5b506104b86108a2366004613e37565b6001600160a01b031660009081526101c8602052604090205490565b3480156108ca57600080fd5b506107e76108d9366004613fde565b611977565b3480156108ea57600080fd5b506104a16108f9366004613f86565b611b1b565b34801561090a57600080fd5b506104b8610919366004613e37565b611b98565b34801561092a57600080fd5b506104a1610939366004614012565b611bdb565b34801561094a57600080fd5b506104b861095936600461434a565b60ff16600090815261012d602052604090205490565b34801561097b57600080fd5b506104b861098a36600461434a565b60ff16600090815261012e602052604090205490565b3480156109ac57600080fd5b506104b86109bb36600461434a565b60ff166000908152610193602052604090205490565b6104a16109df366004613ecb565b611cd1565b3480156109f057600080fd5b50610229546109ff9060ff1681565b60405161042b9190614616565b348015610a1857600080fd5b50610a2c610a273660046142b0565b611d15565b60405161042b91906147a7565b348015610a4557600080fd5b506104b8610a543660046141f7565b611da2565b348015610a6557600080fd5b506104a1610a7436600461440a565b611e7e565b348015610a8557600080fd5b50610449610a943660046142b0565b611eba565b348015610aa557600080fd5b5061041f610ab436600461437f565b611eeb565b348015610ac557600080fd5b506104a1610ad4366004614225565b611f13565b348015610ae557600080fd5b506104b8610af4366004613e37565b6001600160a01b031660009081526101c7602052604090205490565b6104a1610b1e3660046142e0565b611f6e565b348015610b2f57600080fd5b5060c9546104b8565b348015610b4457600080fd5b506104b8610b53366004613e37565b6001600160a01b031660009081526101ca602052604090205490565b348015610b7b57600080fd5b506104a1610b8a3660046140d5565b61207a565b348015610b9b57600080fd5b506101c6546104b8565b348015610bb157600080fd5b506104b8610bc0366004614364565b60ff8216600090815261012e602090815260408083206001600160a01b038516845260010190915290205492915050565b348015610bfd57600080fd5b506104b86101f75481565b348015610c1457600080fd5b5061041f610c23366004613e53565b6123a3565b348015610c3457600080fd5b506104a1610c43366004613e37565b6123bf565b348015610c5457600080fd5b50610449612435565b6000610c6882612445565b80610c775750610c778261247a565b92915050565b6060610c876124c8565b6002018054610c95906148a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc1906148a2565b8015610d0e5780601f10610ce357610100808354040283529160200191610d0e565b820191906000526020600020905b815481529060010190602001808311610cf157829003601f168201915b5050505050905090565b6000610d23826124ec565b610d40576040516333d1c03960e21b815260040160405180910390fd5b610d486124c8565b60009283526006016020525060409020546001600160a01b031690565b610d7182826001612535565b5050565b60006001610d816124c8565b60010154610d8d6124c8565b540303919050565b6001600160a01b03811660009081526101c76020526040902054610dd45760405162461bcd60e51b8152600401610dcb906146a5565b60405180910390fd5b6000610ddf82611b98565b905080610dfe5760405162461bcd60e51b8152600401610dcb906146eb565b806101c66000828254610e119190614808565b90915550506001600160a01b03821660009081526101c860205260409020805482019055610e3f82826125ea565b604080516001600160a01b0384168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05691015b60405180910390a15050565b610e8f33611185565b610eab5760405162461bcd60e51b8152600401610dcb90614736565b60005b81811015610f3f5760ff8416600090815261012d6020526040812060019190820190858585818110610ef057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610f059190613e37565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f37816148dd565b915050610eae565b50505050565b6000610f5082612703565b9050836001600160a01b0316816001600160a01b031614610f835760405162a1148160e81b815260040160405180910390fd5b600080610f8f846127ae565b91509150610fb48187610f9f3390565b6001600160a01b039081169116811491141790565b610fdf57610fc286336123a3565b610fdf57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661100657604051633a954ecd60e21b815260040160405180910390fd5b801561101157600082555b6110196124c8565b6001600160a01b03871660009081526005919091016020526040902080546000190190556110456124c8565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b1761107c6124c8565b60008681526004919091016020526040902055600160e11b83166110eb57600184016110a66124c8565b600082815260049190910160205260409020546110e9576110c56124c8565b5481146110e957836110d56124c8565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b61113e33611185565b61115a5760405162461bcd60e51b8152600401610dcb90614736565b6001600160a01b03919091166000908152609760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526097602052604090205460ff1690565b60408051808201909152610161546001600160a01b038116808352600160a01b90910462ffffff16602083018190529091600091612710906111e59086614840565b6111ef9190614820565b9150509250929050565b60026102295460ff16600281111561122157634e487b7160e01b600052602160045260246000fd5b1461126e5760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206e6f7420656e61626c65640000000000000000006044820152606401610dcb565b600261127b8133846127d6565b61128533836127f4565b610d716112a28260ff166000908152610193602052604090205490565b6112ac9084614840565b61288d565b6112ba33611185565b6112d65760405162461bcd60e51b8152600401610dcb90614736565b60005b81811015610f3f5760ff8416600090815261012d602052604081206001019084848481811061131857634e487b7160e01b600052603260045260246000fd5b905060200201602081019061132d9190613e37565b6001600160a01b031681526020810191909152604001600020805460ff1916905580611358816148dd565b9150506112d9565b61137b83838360405180602001604052806000815250611cd1565b505050565b6001600160a01b03811660009081526101c760205260409020546113b65760405162461bcd60e51b8152600401610dcb906146a5565b60006113c28383611da2565b9050806113e15760405162461bcd60e51b8152600401610dcb906146eb565b6001600160a01b03831660009081526101ca60205260408120805483929061140a908490614808565b90915550506001600160a01b0380841660009081526101cb6020908152604080832093861683529290522080548201905561144683838361290f565b604080516001600160a01b038481168252602082018490528516917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2505050565b60005b6101f754811015610d715760006114aa826118f1565b90506114b68382611380565b50600101611494565b6060816000816001600160401b038111156114ea57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561153c57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816115085790505b50905060005b8281146115ab5761157886868381811061156c57634e487b7160e01b600052603260045260246000fd5b90506020020135611d15565b82828151811061159857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101611542565b50949350505050565b60005b6101f7548110156115e15760006115cd826118f1565b90506115d881610d95565b506001016115b7565b50565b6115ed33611185565b6116095760405162461bcd60e51b8152600401610dcb90614736565b60ff909116600090815261012d6020526040902055565b6000610c7782612703565b61163433611185565b6116505760405162461bcd60e51b8152600401610dcb90614736565b60ff90911660009081526101936020526040902055565b60ff8216600081815261012e602081815260408084206001600160a01b0387168552600181018352908420549484529190525490916116a59161485f565b9392505050565b6116b533611185565b6116d15760405162461bcd60e51b8152600401610dcb90614736565b60c955565b60006001600160a01b0382166116ff576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b0361170f6124c8565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611746612961565b61175060006129bb565b565b61175b33611185565b6117775760405162461bcd60e51b8152600401610dcb90614736565b61137b6101308383613c61565b606061012f8054610c95906148a2565b606060008060006117a4856116d6565b90506000816001600160401b038111156117ce57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156117f7578160200160208202803683370190505b50905061182460408051608081018252600080825260208201819052918101829052606081019190915290565b60015b8386146118b35761183781612a0d565b9150816040015115611848576118ab565b81516001600160a01b03161561185d57815194505b876001600160a01b0316856001600160a01b031614156118ab578083878060010198508151811061189e57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611827565b50909695505050505050565b6118c833611185565b6118e45760405162461bcd60e51b8152600401610dcb90614736565b61137b61012f8383613c61565b60006101c9828154811061191557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b61193933611185565b6119555760405162461bcd60e51b8152600401610dcb90614736565b610d718282612a54565b60606119696124c8565b6003018054610c95906148a2565b606081831061199957604051631960ccad60e11b815260040160405180910390fd5b6000806119a4612b1c565b905060018510156119b457600194505b808411156119c0578093505b60006119cb876116d6565b9050848610156119ea57858503818110156119e4578091505b506119ee565b5060005b6000816001600160401b03811115611a1657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611a3f578160200160208202803683370190505b50905081611a525793506116a592505050565b6000611a5d88611d15565b905060008160400151611a6e575080515b885b888114158015611a805750848714155b15611b0a57611a8e81612a0d565b9250826040015115611a9f57611b02565b82516001600160a01b031615611ab457825191505b8a6001600160a01b0316826001600160a01b03161415611b025780848880600101995081518110611af557634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611a70565b505050928352509095945050505050565b80611b246124c8565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600080611ba56101c65490565b611baf9047614808565b90506116a58382611bd6866001600160a01b031660009081526101c8602052604090205490565b612b2c565b611be433611185565b611c005760405162461bcd60e51b8152600401610dcb90614736565b82818114611c505760405162461bcd60e51b815260206004820152601760248201527f41646d696e206d696e743a2062616420726571756573740000000000000000006044820152606401610dcb565b60005b8181101561112d57611cbf868683818110611c7e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611c939190613e37565b858584818110611cb357634e487b7160e01b600052603260045260246000fd5b90506020020135612b6c565b80611cc9816148dd565b915050611c53565b611cdc848484610f45565b6001600160a01b0383163b15610f3f57611cf884848484612b76565b610f3f576040516368d2bf6b60e11b815260040160405180910390fd5b6040805160808101825260008082526020820181905291810182905260608101919091526040805160808101825260008082526020820181905291810182905260608101919091526001831080611d735750611d6f612b1c565b8310155b15611d7e5792915050565b611d8783612a0d565b9050806040015115611d995792915050565b6116a583612c6a565b6001600160a01b03821660009081526101ca602052604081205481906040516370a0823160e01b81523060048201526001600160a01b038616906370a082319060240160206040518083038186803b158015611dfd57600080fd5b505afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3591906142c8565b611e3f9190614808565b6001600160a01b0380861660009081526101cb6020908152604080832093881683529290522054909150611e769084908390612b2c565b949350505050565b611e8733611185565b611ea35760405162461bcd60e51b8152600401610dcb90614736565b60ff909116600090815261012e6020526040902055565b6060611ec5826124ec565b611ee257604051630a14c4b560e41b815260040160405180910390fd5b610c7782612c9f565b60ff8416600090815261012d60205260408120611f0a90858585612cd8565b95945050505050565b611f1c33611185565b611f385760405162461bcd60e51b8152600401610dcb90614736565b610229805482919060ff19166001836002811115611f6657634e487b7160e01b600052602160045260246000fd5b021790555050565b6001338383611f7f84848484611eeb565b611fbd5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610dcb565b60016102295460ff166002811115611fe557634e487b7160e01b600052602160045260246000fd5b146120325760405162461bcd60e51b815260206004820152601a60248201527f57686974656c6973742073616c65206e6f7420656e61626c65640000000000006044820152606401610dcb565b600161203f81338a6127d6565b61204933896127f4565b6120706120668260ff166000908152610193602052604090205490565b6112ac908a614840565b5050505050505050565b6000805160206149a283398151915254610100900460ff166120af576000805160206149a28339815191525460ff16156120b3565b303b155b6121255760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608401610dcb565b6000805160206149a283398151915254610100900460ff16158015612161576000805160206149a2833981519152805461ffff19166101011790555b600054610100900460ff16158080156121815750600054600160ff909116105b8061219b5750303b15801561219b575060005460ff166001145b6121fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dcb565b6000805460ff191660011790558015612221576000805461ff0019166101001790555b61226b6040518060400160405280600a8152602001695468652047686f756c7360b01b8152506040518060400160405280600681526020016547484f554c5360d01b815250612d83565b612273612dc1565b61227b612df0565b612286610d05612e33565b61228e612e5a565b612296612e5a565b61229e612e5a565b6122dc60405180608001604052806044815260200161495e60449139604051806040016040528060048152602001633539b7b760e11b815250612e81565b6122e68484612ed1565b6122f08686612f0a565b6122fb6001886115e4565b61230860015b6002611e7e565b6123126002612301565b6123246001668e1bc9bf04000061162b565b612336600266b1a2bc2ec5000061162b565b801561237c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50801561112d5750506000805160206149a2833981519152805461ff001916905550505050565b60006123af8383612f31565b806116a557506116a58383612f6e565b6123c7612961565b6001600160a01b03811661242c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dcb565b6115e1816129bb565b60606101308054610c95906148a2565b60006001600160e01b0319821663152a902d60e11b1480610c7757506301ffc9a760e01b6001600160e01b0319831614610c77565b60006301ffc9a760e01b6001600160e01b0319831614806124ab57506380ac58cd60e01b6001600160e01b03198316145b80610c775750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b60008160011115801561250657506125026124c8565b5482105b8015610c775750600160e01b61251a6124c8565b60008481526004919091016020526040902054161592915050565b600061254083611620565b9050811561257f57336001600160a01b0382161461257f5761256281336123a3565b61257f576040516367d9dca160e11b815260040160405180910390fd5b836125886124c8565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b8047101561263a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610dcb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612687576040519150601f19603f3d011682016040523d82523d6000602084013e61268c565b606091505b505090508061137b5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610dcb565b600081600111612795576127156124c8565b600083815260049190910160205260409020549050600160e01b81166127955780612790576127426124c8565b54821061276257604051636f96cda160e11b815260040160405180910390fd5b61276a6124c8565b600019909201600081815260049390930160205260409092205490508061279057612762565b919050565b604051636f96cda160e11b815260040160405180910390fd5b60008060006127bb6124c8565b60009485526006016020525050604090912080549092909150565b60ff8316600090815261012e6020526040902061137b908383612fad565b8060c95481612801613047565b61280b9190614808565b111561284a5760405162461bcd60e51b815260206004820152600e60248201526d4578636565647320737570706c7960901b6044820152606401610dcb565b3233146128835760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610dcb565b61137b8383613056565b803410156128ce5760405162461bcd60e51b815260206004820152600e60248201526d141c9a58d94e881a5b9d985b1a5960921b6044820152606401610dcb565b60006128da823461485f565b90508015610d7157604051339082156108fc029083906000818181858888f1935050505015801561137b573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261137b908490613070565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dcb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516080810182526000808252602082018190529181018290526060810191909152610c77612a3c6124c8565b60008481526004919091016020526040902054613142565b612710811115612aa65760405162461bcd60e51b815260206004820152601c60248201527f526f79616c746965733a2076616c756520697320746f6f2068696768000000006044820152606401610dcb565b6040805180820182526001600160a01b03841680825262ffffff8416602092830181905261016180546001600160b81b0319168317600160a01b90920291909117905582519081529081018390527f908669f35f6fb3977a956ba70597841fe541d1e8491ca3c025161e258d3bfdb69101610e7a565b6000612b266124c8565b54919050565b6101c5546001600160a01b03841660009081526101c7602052604081205490918391612b589086614840565b612b629190614820565b611e76919061485f565b610d7182826127f4565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612bab903390899088908890600401614569565b602060405180830381600087803b158015612bc557600080fd5b505af1925050508015612bf5575060408051601f3d908101601f19168201909252612bf2918101906141db565b60015b612c50573d808015612c23576040519150601f19603f3d011682016040523d82523d6000602084013e612c28565b606091505b508051612c48576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e76565b604080516080810182526000808252602082018190529181018290526060810191909152610c77612c9a83612703565b613142565b606061012f612cad83613189565b610130604051602001612cc293929190614541565b6040516020818303038152906040529050919050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000908190603401604051602081830303815290604052805190602001209050612d548484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505089549150849050613233565b80612d7957506001600160a01b038516600090815260018701602052604090205460ff165b9695505050505050565b6000805160206149a283398151915254610100900460ff16612db75760405162461bcd60e51b8152600401610dcb90614651565b610d718282613249565b600054610100900460ff16612de85760405162461bcd60e51b8152600401610dcb9061475c565b6117506132cc565b600054610100900460ff16612e175760405162461bcd60e51b8152600401610dcb9061475c565b336000908152609760205260409020805460ff19166001179055565b600054610100900460ff166116d15760405162461bcd60e51b8152600401610dcb9061475c565b600054610100900460ff166117505760405162461bcd60e51b8152600401610dcb9061475c565b600054610100900460ff16612ea85760405162461bcd60e51b8152600401610dcb9061475c565b8151612ebc9061012f906020850190613ce5565b50805161137b90610130906020840190613ce5565b600054610100900460ff16612ef85760405162461bcd60e51b8152600401610dcb9061475c565b612f0282826132fc565b50516101f755565b600054610100900460ff166119555760405162461bcd60e51b8152600401610dcb9061475c565b6000612f3b6124c8565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b600080612f7a8461332d565b90506001600160a01b03811615801590611e765750826001600160a01b0316816001600160a01b03161491505092915050565b82546001600160a01b0383166000908152600185016020526040902054612fd5908390614808565b11156130135760405162461bcd60e51b815260206004820152600d60248201526c115e18d959591cc81b1a5b5a5d609a1b6044820152606401610dcb565b6001600160a01b03821660009081526001840160205260408120805483929061303d908490614808565b9091555050505050565b6000613051610d75565b905090565b610d71828260405180602001604052806000815250613493565b60006130c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166135109092919063ffffffff16565b80519091501561137b57808060200190518101906130e391906140b9565b61137b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610dcb565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b606060006131968361351f565b60010190506000816001600160401b038111156131c357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131ed576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846132265761322b565b6131f7565b509392505050565b60008261324085846135f7565b14949350505050565b6000805160206149a283398151915254610100900460ff1661327d5760405162461bcd60e51b8152600401610dcb90614651565b816132866124c8565b600201908051906020019061329c929190613ce5565b50806132a66124c8565b60030190805190602001906132bc929190613ce5565b5060016132c76124c8565b555050565b600054610100900460ff166132f35760405162461bcd60e51b8152600401610dcb9061475c565b611750336129bb565b600054610100900460ff166133235760405162461bcd60e51b8152600401610dcb9061475c565b610d71828261364a565b600080468060018114613362576089811461337e576004811461339a576201388181146133b65761053981146133d2576133ea565b73a5409ec958c83c3f309868babaca7c86dcb077c192506133ea565b7358807bad0b376efc12f5ad86aac70e78ed67deae92506133ea565b73f57b2c51ded3a29e6891aba85459d600256cf31792506133ea565b73ff7ca10af37178bdd056628ef42fd7f799fac77c92506133ea565b73e1a2bbc877b29adbc56d2659dbcb0ae14ee6207192505b506001600160a01b03821615806134015750806089145b8061340e57508062013881145b1561341a575092915050565b60405163c455279160e01b81526001600160a01b03858116600483015283169063c45527919060240160206040518083038186803b15801561345b57600080fd5b505afa15801561346f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e769190614209565b61349d83836137a4565b6001600160a01b0383163b1561137b5760006134b76124c8565b5490508281035b6134d16000868380600101945086612b76565b6134ee576040516368d2bf6b60e11b815260040160405180910390fd5b8181106134be57816134fe6124c8565b541461350957600080fd5b5050505050565b6060611e7684846000856138d8565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061355e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061358a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106135a857662386f26fc10000830492506010015b6305f5e10083106135c0576305f5e100830492506008015b61271083106135d457612710830492506004015b606483106135e6576064830492506002015b600a8310610c775760010192915050565b600081815b845181101561322b576136368286838151811061362957634e487b7160e01b600052603260045260246000fd5b60200260200101516139b3565b915080613642816148dd565b9150506135fc565b600054610100900460ff166136715760405162461bcd60e51b8152600401610dcb9061475c565b80518251146136dd5760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b6064820152608401610dcb565b600082511161372e5760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f207061796565730000000000006044820152606401610dcb565b60005b825181101561137b5761379283828151811061375d57634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061378557634e487b7160e01b600052603260045260246000fd5b60200260200101516139e2565b8061379c816148dd565b915050613731565b60006137ae6124c8565b549050816137cf5760405163b562e8dd60e01b815260040160405180910390fd5b6801000000000000000182026137e36124c8565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b171761381e6124c8565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146138a857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613870565b50816138c657604051622e076360e81b815260040160405180910390fd5b806138cf6124c8565b555061137b9050565b6060824710156139395760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610dcb565b600080866001600160a01b031685876040516139559190614525565b60006040518083038185875af1925050503d8060008114613992576040519150601f19603f3d011682016040523d82523d6000602084013e613997565b606091505b50915091506139a887838387613bc6565b979650505050505050565b60008183106139cf5760008281526020849052604090206116a5565b60008381526020839052604090206116a5565b6001600160a01b038216613a4d5760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b6064820152608401610dcb565b60008111613a9d5760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a207368617265732061726520300000006044820152606401610dcb565b6001600160a01b03821660009081526101c7602052604090205415613b185760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b6064820152608401610dcb565b6101c98054600181019091557fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a0180546001600160a01b0319166001600160a01b03841690811790915560009081526101c7602052604090208190556101c554613b83908290614808565b6101c555604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac9101610e7a565b60608315613c32578251613c2b576001600160a01b0385163b613c2b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dcb565b5081611e76565b611e768383815115613c475781518083602001fd5b8060405162461bcd60e51b8152600401610dcb919061463e565b828054613c6d906148a2565b90600052602060002090601f016020900481019282613c8f5760008555613cd5565b82601f10613ca85782800160ff19823516178555613cd5565b82800160010185558215613cd5579182015b82811115613cd5578235825591602001919060010190613cba565b50613ce1929150613d59565b5090565b828054613cf1906148a2565b90600052602060002090601f016020900481019282613d135760008555613cd5565b82601f10613d2c57805160ff1916838001178555613cd5565b82800160010185558215613cd5579182015b82811115613cd5578251825591602001919060010190613d3e565b5b80821115613ce15760008155600101613d5a565b60008083601f840112613d7f578182fd5b5081356001600160401b03811115613d95578182fd5b6020830191508360208260051b8501011115613db057600080fd5b9250929050565b600082601f830112613dc7578081fd5b81356020613ddc613dd7836147e5565b6147b5565b80838252828201915082860187848660051b8901011115613dfb578586fd5b855b85811015613e1957813584529284019290840190600101613dfd565b5090979650505050505050565b803560ff8116811461279057600080fd5b600060208284031215613e48578081fd5b81356116a581614924565b60008060408385031215613e65578081fd5b8235613e7081614924565b91506020830135613e8081614924565b809150509250929050565b600080600060608486031215613e9f578081fd5b8335613eaa81614924565b92506020840135613eba81614924565b929592945050506040919091013590565b60008060008060808587031215613ee0578182fd5b8435613eeb81614924565b9350602085810135613efc81614924565b93506040860135925060608601356001600160401b0380821115613f1e578384fd5b818801915088601f830112613f31578384fd5b813581811115613f4357613f4361490e565b613f55601f8201601f191685016147b5565b91508082528984828501011115613f6a578485fd5b8084840185840137810190920192909252939692955090935050565b60008060408385031215613f98578182fd5b8235613fa381614924565b91506020830135613e8081614939565b60008060408385031215613fc5578182fd5b8235613fd081614924565b946020939093013593505050565b600080600060608486031215613ff2578081fd5b8335613ffd81614924565b95602085013595506040909401359392505050565b60008060008060408587031215614027578182fd5b84356001600160401b038082111561403d578384fd5b61404988838901613d6e565b90965094506020870135915080821115614061578384fd5b5061406e87828801613d6e565b95989497509550505050565b6000806020838503121561408c578182fd5b82356001600160401b038111156140a1578283fd5b6140ad85828601613d6e565b90969095509350505050565b6000602082840312156140ca578081fd5b81516116a581614939565b600080600080600060a086880312156140ec578283fd5b853594506020808701356140ff81614924565b94506040870135935060608701356001600160401b0380821115614121578384fd5b818901915089601f830112614134578384fd5b8135614142613dd7826147e5565b8082825285820191508585018d878560051b8801011115614161578788fd5b8795505b8386101561418c57803561417881614924565b835260019590950194918601918601614165565b509650505060808901359250808311156141a4578384fd5b50506141b288828901613db7565b9150509295509295909350565b6000602082840312156141d0578081fd5b81356116a581614947565b6000602082840312156141ec578081fd5b81516116a581614947565b60008060408385031215613e65578182fd5b60006020828403121561421a578081fd5b81516116a581614924565b600060208284031215614236578081fd5b8135600381106116a5578182fd5b60008060208385031215614256578182fd5b82356001600160401b038082111561426c578384fd5b818501915085601f83011261427f578384fd5b81358181111561428d578485fd5b86602082850101111561429e578485fd5b60209290920196919550909350505050565b6000602082840312156142c1578081fd5b5035919050565b6000602082840312156142d9578081fd5b5051919050565b6000806000604084860312156142f4578081fd5b8335925060208401356001600160401b03811115614310578182fd5b61431c86828701613d6e565b9497909650939450505050565b6000806040838503121561433b578182fd5b50508035926020909101359150565b60006020828403121561435b578081fd5b6116a582613e26565b60008060408385031215614376578182fd5b613e7083613e26565b60008060008060608587031215614394578182fd5b61439d85613e26565b935060208501356143ad81614924565b925060408501356001600160401b038111156143c7578283fd5b61406e87828801613d6e565b6000806000604084860312156143e7578081fd5b6143f084613e26565b925060208401356001600160401b03811115614310578182fd5b6000806040838503121561441c578182fd5b613fd083613e26565b6000815180845261443d816020860160208601614876565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061446b57607f831692505b602080841082141561448b57634e487b7160e01b86526022600452602486fd5b81801561449f57600181146144b0576144dd565b60ff198616895284890196506144dd565b60008881526020902060005b868110156144d55781548b8201529085019083016144bc565b505084890196505b50505050505092915050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b60008251614537818460208701614876565b9190910192915050565b600061454d8286614451565b845161455d818360208901614876565b6139a881830186614451565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d7990830184614425565b6020808252825182820181905260009190848201906040850190845b818110156118b3576145cb8385516144e9565b92840192608092909201916001016145b8565b6020808252825182820181905260009190848201906040850190845b818110156118b3578351835292840192918401916001016145fa565b602081016003831061463857634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260006116a56020830184614425565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252600c908201526b2737ba1030b71030b236b4b760a11b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60808101610c7782846144e9565b604051601f8201601f191681016001600160401b03811182821017156147dd576147dd61490e565b604052919050565b60006001600160401b038211156147fe576147fe61490e565b5060051b60200190565b6000821982111561481b5761481b6148f8565b500190565b60008261483b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561485a5761485a6148f8565b500290565b600082821015614871576148716148f8565b500390565b60005b83811015614891578181015183820152602001614879565b83811115610f3f5750506000910152565b600181811c908216806148b657607f821691505b602082108114156148d757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156148f1576148f16148f8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115e157600080fd5b80151581146115e157600080fd5b6001600160e01b0319811681146115e157600080fdfe68747470733a2f2f697066732e696f2f697066732f516d553465725a656a4b416931724748356e7a684346485233367a67663138514c474b79717873594a34785776742fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220ab6933d333509d1d9fa726c83a1e4828a0ec2c6c7319f29cf25532707d04c44864736f6c63430008040033