0x60806040526004361061030b575f3560e01c806353df5c7c11610199578063af6900c3116100e0578063d73c1fb311610089578063f04e283e11610063578063f04e283e14610c71578063f2fde38b14610c84578063fee81cf414610c9757610312565b8063d73c1fb314610be4578063dd62ed3e14610c04578063e436744514610c5057610312565b8063bbefa83a116100ba578063bbefa83a14610b92578063c4d66de814610ba6578063c87b56dd14610bc557610312565b8063af6900c314610b40578063b19de39f14610b54578063b698206914610b7357610312565b806370a08231116101425780638da5cb5b1161011c5780638da5cb5b14610af557806395d89b4114610b0d578063a9059cbb14610b2157610312565b806370a0823114610a88578063715018a614610ad957806375b238fc14610ae157610312565b80635a446215116101735780635a44621514610a3c5780635d148e5c14610a5b5780636338cb8a14610a7457610312565b806353df5c7c14610a0157806354d1f13d14610a1557806355f804b314610a1d57610312565b8063274e430b1161025d57806347f618a511610206578063514e62fc116101e0578063514e62fc146109725780635327bba3146109a757806353d6fd59146109e257610312565b806347f618a5146109075780634a4ee7b1146109265780634ef41efc1461093957610312565b8063313ce56711610237578063313ce567146108c15780633af32abf146108d45780633ccfd60b146108f357610312565b8063274e430b146108525780632a6a935d146108715780632de948071461089057610312565b8063183a4f6e116102bf57806323b848ff1161029957806323b848ff1461081757806323b872dd1461082b578063256929621461084a57610312565b8063183a4f6e146107bc5780631c10893f146107cf5780631cd64df4146107e257610312565b8063095ea7b3116102f0578063095ea7b314610734578063180434a31461076357806318160ddd1461078157610312565b806304dfe79d146106da57806306fdde031461071357610312565b3661031257005b68a20d6e21d0e52553085f3560e01c63e985e9c58190036103b45760018201546001600160a01b0316331461035a5760405163ce5a776b60e01b815260040160405180910390fd5b6044361015610367575f80fd5b6004356001600160a01b038181165f908152600385016020908152604080832060243594851684529091529020546103b19060ff166103a6575f6103a9565b60015b60ff16610cc8565b50505b80636352211e036104185760018201546001600160a01b031633146103ec5760405163ce5a776b60e01b815260040160405180910390fd5b60243610156103f9575f80fd5b60043561041661040882610cd0565b6001600160a01b0316610cc8565b505b8063e5eb36c8036104845760018201546001600160a01b031633146104505760405163ce5a776b60e01b815260040160405180910390fd5b608436101561045d575f80fd5b60043560243560443560643561047584848484610d06565b61047f6001610cc8565b505050505b8063813500fc0361051c5760018201546001600160a01b031633146104bc5760405163ce5a776b60e01b815260040160405180910390fd5b60643610156104c9575f80fd5b6001600160a01b036044358181165f90815268a20d6e21d0e525530b6020908152604080832060043595861684529091529020805460ff19166024351515908117909155906105186001610cc8565b5050505b8063d10b6e0c0361057c5760018201546001600160a01b031633146105545760405163ce5a776b60e01b815260040160405180910390fd5b6064361015610561575f80fd5b600435602435604435610578610408848484610d4d565b5050505b8063081812fc036105d25760018201546001600160a01b031633146105b45760405163ce5a776b60e01b815260040160405180910390fd5b60243610156105c1575f80fd5b6004356105d061040882610e59565b505b8063f5b100ea036106585760018201546001600160a01b0316331461060a5760405163ce5a776b60e01b815260040160405180910390fd5b6024361015610617575f80fd5b600435610656610651826001600160a01b03165f90815268a20d6e21d0e5255310602052604090205463ffffffff600160801b9091041690565b610cc8565b505b8063e2c79281036106c35760018201546001600160a01b031633146106905760405163ce5a776b60e01b815260040160405180910390fd5b600436101561069d575f80fd5b68a20d6e21d0e5255308546106c39068010000000000000000900463ffffffff16610cc8565b8063b7a94eb8036106d8576106d86001610cc8565b005b3480156106e5575f80fd5b506003546106fc9065010000000000900460ff1681565b60405160ff90911681526020015b60405180910390f35b34801561071e575f80fd5b50610727610ea3565b60405161070a9190612a32565b34801561073f575f80fd5b5061075361074e366004612a94565b610f32565b604051901515815260200161070a565b34801561076e575f80fd5b5060035461075390610100900460ff1681565b34801561078c575f80fd5b5068a20d6e21d0e525530854600160601b90046bffffffffffffffffffffffff165b60405190815260200161070a565b6106d86107ca366004612abc565b610fa6565b6106d86107dd366004612a94565b610fb3565b3480156107ed575f80fd5b506107536107fc366004612a94565b638b78c6d8600c9081525f9290925260209091205481161490565b348015610822575f80fd5b506106d8610fc9565b348015610836575f80fd5b50610753610845366004612ad3565b610fec565b6106d86110a5565b34801561085d575f80fd5b5061075361086c366004612b0c565b6110f2565b34801561087c575f80fd5b506106d861088b366004612b34565b611140565b34801561089b575f80fd5b506107ae6108aa366004612b0c565b638b78c6d8600c9081525f91909152602090205490565b3480156108cc575f80fd5b5060126106fc565b3480156108df575f80fd5b506107536108ee366004612b0c565b61114a565b3480156108fe575f80fd5b506106d8611187565b348015610912575f80fd5b506003546107539062010000900460ff1681565b6106d8610934366004612a94565b61119b565b348015610944575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b03909116815260200161070a565b34801561097d575f80fd5b5061075361098c366004612a94565b638b78c6d8600c9081525f9290925260209091205416151590565b3480156109b2575f80fd5b506003546109cd906601000000000000900463ffffffff1681565b60405163ffffffff909116815260200161070a565b3480156109ed575f80fd5b506106d86109fc366004612b4d565b6111ad565b348015610a0c575f80fd5b506106d86111f2565b6106d861120d565b348015610a28575f80fd5b506106d8610a37366004612bbc565b611246565b348015610a47575f80fd5b506106d8610a56366004612bfb565b611282565b348015610a66575f80fd5b506003546107539060ff1681565b348015610a7f575f80fd5b506106d86112d8565b348015610a93575f80fd5b506107ae610aa2366004612b0c565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902054600160a01b90046bffffffffffffffffffffffff1690565b6106d86112f5565b348015610aec575f80fd5b506107ae600181565b348015610b00575f80fd5b50638b78c6d8195461095a565b348015610b18575f80fd5b50610727611308565b348015610b2c575f80fd5b50610753610b3b366004612a94565b611317565b348015610b4b575f80fd5b506106d861132c565b348015610b5f575f80fd5b506106d8610b6e366004612c62565b61134d565b348015610b7e575f80fd5b506106d8610b8d366004612c85565b6113af565b348015610b9d575f80fd5b506106d861140b565b348015610bb1575f80fd5b506106d8610bc0366004612b0c565b61142a565b348015610bd0575f80fd5b50610727610bdf366004612abc565b611462565b348015610bef575f80fd5b50600354610753906301000000900460ff1681565b348015610c0f575f80fd5b506107ae610c1e366004612ca5565b6001600160a01b039182165f90815268a20d6e21d0e525530d6020908152604080832093909416825291909152205490565b348015610c5b575f80fd5b5060035461075390640100000000900460ff1681565b6106d8610c7f366004612b0c565b611573565b6106d8610c92366004612b0c565b6115ad565b348015610ca2575f80fd5b506107ae610cb1366004612b0c565b63389a75e1600c9081525f91909152602090205490565b805f5260205ff35b5f610cda826115d3565b610cf75760405163677510db60e11b815260040160405180910390fd5b610d00826115ef565b92915050565b610d1284848484611642565b610d1c8484611a85565b826001600160a01b0316846001600160a01b031614610d4757610d4784670de0b6b3a7640000611ba2565b50505050565b5f68a20d6e21d0e52553088168a20d6e21d0e525530a81610d9968a20d6e21d0e525530f600189901b5b600381901c5f90815260209290925260409091205460059190911b60e0161c90565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116915084168114610e24576001600160a01b038082165f90815260038401602090815260408083209388168352929052205460ff16610e24576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8581526004909201602052604090912080546001600160a01b0387166001600160a01b031990911617905590509392505050565b5f610e63826115d3565b610e805760405163677510db60e11b815260040160405180910390fd5b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f8054610eb190612ccd565b80601f0160208091040260200160405190810160405280929190818152602001828054610edd90612ccd565b8015610f285780601f10610eff57610100808354040283529160200191610f28565b820191905f5260205f20905b815481529060010190602001808311610f0b57829003601f168201915b5050505050905090565b5f8068a20d6e21d0e5255308335f81815260058301602090815260408083206001600160a01b038a16808552908352928190208890555187815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b610fb03382611c83565b50565b610fbb611c8e565b610fc58282611ca8565b5050565b6001610fd481611cb4565b506003805464ff000000001916640100000000179055565b6001600160a01b0383165f90815268a20d6e21d0e525530d6020908152604080832033845290915281205468a20d6e21d0e5255308905f19811461108e5780841115611064576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386165f9081526005830160209081526040808320338452909152902084820390555b611099868686611ce5565b50600195945050505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054600160581b9004600116820361112d57823b5b9392505050565b54600160581b9004600216151592915050565b610fb03382611d1d565b6001600160a01b0381165f90815268a20d6e21d0e52553106020526040812054610d00906affffffffffffffffffffff165b60571c600116151590565b600161119281611cb4565b610fb033611db4565b6111a3611c8e565b610fc58282611c83565b60016111b881611cb4565b6003546301000000900460ff16156111e3576040516303cb96db60e21b815260040160405180910390fd5b6111ed8383611dcd565b505050565b60016111fd81611cb4565b506003805460ff19166001179055565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b600161125181611cb4565b60035460ff1615611275576040516303cb96db60e21b815260040160405180910390fd5b6002610d47838583612d57565b600161128d81611cb4565b600354610100900460ff16156112b6576040516303cb96db60e21b815260040160405180910390fd5b5f6112c2858783612d57565b5060016112d0838583612d57565b505050505050565b60016112e381611cb4565b506003805461ff001916610100179055565b6112fd611c8e565b6113065f611e63565b565b606060018054610eb190612ccd565b5f611323338484611ce5565b50600192915050565b600161133781611cb4565b506003805463ff00000019166301000000179055565b600161135881611cb4565b60035462010000900460ff1615611382576040516303cb96db60e21b815260040160405180910390fd5b506003805463ffffffff90921666010000000000000269ffffffff00000000000019909216919091179055565b60016113ba81611cb4565b600354640100000000900460ff16156113e6576040516303cb96db60e21b815260040160405180910390fd5b506003805460ff909216650100000000000265ff000000000019909216919091179055565b600161141681611cb4565b506003805462ff0000191662010000179055565b600161143581611cb4565b5f611449670de0b6b3a76400006001612e25565b905033611457828286611ea0565b610d47816001611dcd565b606061146d826115d3565b61148a5760405163677510db60e11b815260040160405180910390fd5b6002805461149790612ccd565b15905061156e57610d00600280546114ae90612ccd565b80601f01602080910402602001604051908101604052809291908181526020018280546114da90612ccd565b80156115255780601f106114fc57610100808354040283529160200191611525565b820191905f5260205f20905b81548152906001019060200180831161150857829003601f168201915b50505050506040518060400160405280600481526020017f7b69647d0000000000000000000000000000000000000000000000000000000081525061156985612093565b6120d5565b919050565b61157b611c8e565b63389a75e1600c52805f526020600c2080544211156115a157636f5e88185f526004601cfd5b5f9055610fb081611e63565b6115b5611c8e565b8060601b6115ca57637448fbae5f526004601cfd5b610fb081611e63565b5f806115de836115ef565b6001600160a01b0316141592915050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a8261161c68a20d6e21d0e525530f600187901b610d77565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b68a20d6e21d0e52553086001600160a01b03841661167357604051633a954ecd60e21b815260040160405180910390fd5b5f816002015f61168a84600701610d778860011b90565b63ffffffff16815260208101919091526040015f20546001600160a01b039081169150861681146116e7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b0316836001600160a01b031614611782576001600160a01b038087165f90815260038401602090815260408083209387168352929052205460ff16611782575f8481526004830160205260409020546001600160a01b03848116911614611782576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61178c876121f5565b90505f611798876121f5565b8254909150670de0b6b3a76400009083906014906117cc908490600160a01b90046bffffffffffffffffffffffff16612e3c565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915582546001600160a01b038116670de0b6b3a7640000600160a01b92839004841601909216021782555061186260078501600188901b611830848b612268565b826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b5f868152600485016020908152604080832080546001600160a01b03191690556001600160a01b038b168352600687018252808320855463ffffffff60801b198116600160801b9182900463ffffffff9081165f1901908116909202178755631fffffff600382901c168552925282205460059190911b60e0161c6001600160a01b038a165f908152600687016020526040902063ffffffff919091169150611950906119176007880160018b811b01610d77565b63ffffffff1683826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b8154600163ffffffff600160801b80840482169283019091160263ffffffff60801b199092169190911783556119a26007870161199084600190811b0190565b61183060078a0160018d811b01610d77565b6001600160a01b0389165f9081526006870160209081526040808320909152600383901c82529020805460e0600584901b1681811c8b1863ffffffff16901b189055611a246007870160018a811b0183826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b5050866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051611a7391815260200190565b60405180910390a35050505050505050565b60035465010000000000900460ff165f819003611aa157505050565b6001600160a01b0382165f90815268a20d6e21d0e52553106020526040902054670de0b6b3a7640000820290600160a01b90046bffffffffffffffffffffffff1611611aec57505050565b611b2261117c836001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b15611b2c57505050565b638b78c6d819546001600160a01b0316836001600160a01b031603611b5057505050565b638b78c6d8600c9081525f849052602090205460011615611b7057505050565b6040517f0f2acbfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003546601000000000000900463ffffffff165f819003611bc257505050565b5f80611c0e84611bfb876001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b6affffffffffffffffffffff1690612320565b9150915060028110611c3b5780800283026301312d00808210611c2f578091505b611c3882612394565b50505b6001600160a01b0385165f90815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166affffffffffffffffffffff84161790555b5050505050565b610fc582825f6123c7565b638b78c6d819543314611306576382b429005f526004601cfd5b610fc5828260016123c7565b638b78c6d819543314610fb057638b78c6d8600c52335f52806020600c205416610fb0576382b429005f526004601cfd5b611cf083838361241e565b611cfa8383611a85565b816001600160a01b0316836001600160a01b0316146111ed576111ed8382611ba2565b5f611d27836121f5565b8054909150600160581b9004600216151582151514611d6a57805460ff600160581b8083048216600218909116026bff0000000000000000000000199091161781555b826001600160a01b03167fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039383604051611da7911515815260200190565b60405180910390a2505050565b5f385f3847855af1610fb05763b12d13eb5f526004601cfd5b610fc582611e1b83611e08866001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b6affffffffffffffffffffff16906129a2565b6001600160a01b03919091165f90815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166affffffffffffffffffffff909216919091179055565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b68a20d6e21d0e52553088054640100000000900463ffffffff1615611ef1576040517fead4d2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611f31576040517f39a84a7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f3a826129ce565b805467ffffffff0000000019166401000000001781556001810180546001600160a01b0384166001600160a01b03199091161790558315610d47576001600160a01b038316611f9c57604051633a954ecd60e21b815260040160405180910390fd5b6b0de0b6b39983494c589bffff841115611fe2576040517fe5cfe95700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16600160601b6bffffffffffffffffffffffff8616021781555f612028846121f5565b80546001600160a01b03908116600160a01b6bffffffffffffffffffffffff8916021782556040518781529192508516905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611c7c846001611d1d565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a9004806120ac575050819003601f19909101908152919050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116121a5576001838203015f6020851061211557508388205b601f851660200360031b89515b8b51818118831c61218c57831561215c5783888e201461215c57808a5260019c8d019c90990198848d1061215657506121a0565b50612122565b5f5b8b8101518b82015260200187811061215e57509b87019b98860198871561218c57848d1061215657506121a0565b895260019b8c019b90980197838c10612122575b505050505b84935060206040510194508781038585030192505b808810156121d55787518452602097880197909301926121ba565b50505f818401908152602001604052601f19909201918252509392505050565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054909168a20d6e21d0e525530891600160581b90046001169003612262576001833b15612240576002175b825460ff909116600160581b026bff0000000000000000000000199091161782555b50919050565b8154600160601b900463ffffffff1668a20d6e21d0e52553085f82900361231957805481905f9061229e9063ffffffff16612e61565b825463ffffffff8083166101009490940a848102910219909116179092558554600160601b82027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff9091161786555f908152600283016020526040902080546001600160a01b0386166001600160a01b031990911617905591505b5092915050565b5f80605784901c6001161561233957508290505f61238d565b637fffffff620151804204811690603886901c1666ffffffffffffff861681831461236457508190505f5b60389190911b66ffffffffffffff602887901c811692909201918216179350620de0b690049150505b9250929050565b80600117601052605b810460788211025f5b8181146123bc57601080802090526001016123a6565b5050601051610fb057fe5b638b78c6d8600c52825f526020600c208054838117836123e8575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3505050505050565b6001600160a01b03821661244557604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e52553085f612459856121f5565b90505f612465856121f5565b905061249a6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b825463ffffffff600160801b808304821660808501528454041660a08301526bffffffffffffffffffffffff600160a01b909104166040820181905285111561250f576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810180518690039081905283546bffffffffffffffffffffffff808316600160a01b9081026001600160a01b03938416178755855481810483168a0160608701819052909216029116178355608082015161257d91670de0b6b3a7640000906064020480821191030290565b81528154600160581b90046002165f036125ee57856001600160a01b0316876001600160a01b0316036125b857805160808201510360a08201525b6125e8670de0b6b3a76400008260600151606402816125d9576125d9612e83565b048260a0015180821191030290565b60208201525b5f6126358260200151835f01510160408051808201909152606081525f60208201526040805101828152806020018360051b81016040528183528083602001525050919050565b82519091501561275c576001600160a01b0388165f908152600686016020526040902060808301518351875463ffffffff6801000000000000000080830482168490038216026bffffffff0000000000000000199092169190911789558754918303908116600160801b0263ffffffff60801b199092169190911787555b5f1991909101600381901c5f90815260208490526040812054919291600584901b60e0161c60078a01602052633fffffff600282901c165f90815260409020805460c0600684901b1681811c67ffffffffffffffff16901b18905563ffffffff1690505f81815260048a016020908152604090912080546001600160a01b0319169055858101805160608f901b600885901b1760011781529091019052508082036126b3575050505b60208201511561292a576001600160a01b0387165f9081526006860160209081526040822060a08501519185015190929082019061279a878c612268565b895460208801516801000000000000000080830463ffffffff9081169092018216026bffffffff0000000000000000198316178c558954858216600160801b0263ffffffff60801b19909116178a55919250670de0b6b3a7640000600160601b82046bffffffffffffffffffffffff908116606402160491640100000000909104165b61282e8b600701610d778360011b90565b63ffffffff161561284d5760010181811115612848575060015b61281d565b6020869052600385901c5f90815260409020805460e0600588901b1681811c841863ffffffff16901b18905560078b016020908152600282901c5f90815260409020805460c0600685901b1681811c9389901b63ffffffff8816179390931867ffffffffffffffff1690921b90911890556001909401936128ed878e835f8360200151818360081b8560601b171781526020810185602001525050505050565b600101818111156128fc575060015b83850361281d578a5463ffffffff9091166401000000000267ffffffff0000000019909116178a5550505050505b8051511561294b57600185015461294b9082906001600160a01b03166129fb565b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161299191815260200190565b60405180910390a350505050505050565b5f6001605784901c161515821515146129c7576a800000000000000000000092909218915b5090919050565b630f4599e55f523360205260205f6024601c5f855af160015f511416610fb05763d125259c5f526004601cfd5b81516040810363263c69d68152602080820152815160051b604401915060208183601c84015f875af1600182511416610d47575f81fd5b5f602080835283518060208501525f5b81811015612a5e57858101830151858201604001528201612a42565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461156e575f80fd5b5f8060408385031215612aa5575f80fd5b612aae83612a7e565b946020939093013593505050565b5f60208284031215612acc575f80fd5b5035919050565b5f805f60608486031215612ae5575f80fd5b612aee84612a7e565b9250612afc60208501612a7e565b9150604084013590509250925092565b5f60208284031215612b1c575f80fd5b61112682612a7e565b8035801515811461156e575f80fd5b5f60208284031215612b44575f80fd5b61112682612b25565b5f8060408385031215612b5e575f80fd5b612b6783612a7e565b9150612b7560208401612b25565b90509250929050565b5f8083601f840112612b8e575f80fd5b50813567ffffffffffffffff811115612ba5575f80fd5b60208301915083602082850101111561238d575f80fd5b5f8060208385031215612bcd575f80fd5b823567ffffffffffffffff811115612be3575f80fd5b612bef85828601612b7e565b90969095509350505050565b5f805f8060408587031215612c0e575f80fd5b843567ffffffffffffffff80821115612c25575f80fd5b612c3188838901612b7e565b90965094506020870135915080821115612c49575f80fd5b50612c5687828801612b7e565b95989497509550505050565b5f60208284031215612c72575f80fd5b813563ffffffff81168114611126575f80fd5b5f60208284031215612c95575f80fd5b813560ff81168114611126575f80fd5b5f8060408385031215612cb6575f80fd5b612cbf83612a7e565b9150612b7560208401612a7e565b600181811c90821680612ce157607f821691505b60208210810361226257634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b601f8211156111ed57805f5260205f20601f840160051c81016020851015612d385750805b601f840160051c820191505b81811015611c7c575f8155600101612d44565b67ffffffffffffffff831115612d6f57612d6f612cff565b612d8383612d7d8354612ccd565b83612d13565b5f601f841160018114612db4575f8515612d9d5750838201355b5f19600387901b1c1916600186901b178355611c7c565b5f83815260208120601f198716915b82811015612de35786850135825560209485019460019092019101612dc3565b5086821015612dff575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d0057610d00612e11565b6bffffffffffffffffffffffff82811682821603908082111561231957612319612e11565b5f63ffffffff808316818103612e7957612e79612e11565b6001019392505050565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220a42479f0ba8eecd874ff5d12e1b47a24ad1df2dc43f2913de2e6db2deb4baf9d64736f6c63430008180033
0x608060405234801562000010575f80fd5b506040516200364638038062003646833981016040819052620000339162000578565b6200003e3262000050565b620000498162000111565b506200072c565b6200005b8162000157565b6200006881600162000193565b60408051808201909152600e81526d121a5919195b8813db99480d0c0d60921b60208201525f906200009b90826200063c565b506040805180820190915260098152681212511111538d0c0d60ba1b6020820152600190620000cb90826200063c565b506003805464ffffffffff60281b1916650100000000001790556040805160608101909152603f8082526200360760208301396002906200010d90826200063c565b5050565b60016200011e816200021d565b5f62000134670de0b6b3a7640000600162000708565b9050336200014482828662000250565b6200015181600162000193565b50505050565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a35b50565b6200010d82620001dd83620001cd836001600160a01b03165f90815268a20d6e21d0e525531060205260409020546001600160581b031690565b6001600160581b031690620003f3565b6001600160a01b03919091165f90815268a20d6e21d0e52553106020526040902080546001600160581b0319166001600160581b03909216919091179055565b638b78c6d8195433146200019057638b78c6d8600c52335f52806020600c20541662000190576382b429005f526004601cfd5b68a20d6e21d0e52553088054640100000000900463ffffffff16156200028957604051633ab534b960e21b815260040160405180910390fd5b6001600160a01b038216620002b1576040516339a84a7b60e01b815260040160405180910390fd5b620002bc826200042a565b805463ffffffff60201b19166401000000001781556001810180546001600160a01b0384166001600160a01b0319909116179055831562000151576001600160a01b0383166200031f57604051633a954ecd60e21b815260040160405180910390fd5b6b0de0b6b39983494c589bffff8411156200034d5760405163e5cfe95760e01b815260040160405180910390fd5b8054600160601b600160c01b0319166c010000000000000000000000006001600160601b038616021781555f620003848462000458565b80546001600160a01b03908116600160a01b6001600160601b038916021782556040518781529192508516905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620003ec846001620004d5565b5050505050565b5f811515620004078460571c600116151590565b15151462000421576a800000000000000000000092909218915b50815b92915050565b630f4599e55f523360205260205f6024601c5f855af160015f511416620001905763d125259c5f526004601cfd5b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054909168a20d6e21d0e5255308916b01000000000000000000000090046001169003620004cf576001833b15620004ad576002175b825460ff9091166b0100000000000000000000000260ff60581b199091161782555b50919050565b5f620004e18362000458565b80549091506b01000000000000000000000090046002161515821515146200052d57805460ff6b01000000000000000000000080830482166002189091160260ff60581b199091161781555b826001600160a01b03167fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d6420393836040516200056b911515815260200190565b60405180910390a2505050565b5f6020828403121562000589575f80fd5b81516001600160a01b0381168114620005a0575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005d057607f821691505b602082108103620004cf57634e487b7160e01b5f52602260045260245ffd5b601f8211156200063757805f5260205f20601f840160051c81016020851015620006165750805b601f840160051c820191505b81811015620003ec575f815560010162000622565b505050565b81516001600160401b03811115620006585762000658620005a7565b6200067081620006698454620005bb565b84620005ef565b602080601f831160018114620006a6575f84156200068e5750858301515b5f19600386901b1c1916600185901b17855562000700565b5f85815260208120601f198616915b82811015620006d657888601518255948401946001909101908401620006b5565b5085821015620006f457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820281158282048414176200042457634e487b7160e01b5f52601160045260245ffd5b612ecd806200073a5f395ff3fe60806040526004361061030b575f3560e01c806353df5c7c11610199578063af6900c3116100e0578063d73c1fb311610089578063f04e283e11610063578063f04e283e14610c71578063f2fde38b14610c84578063fee81cf414610c9757610312565b8063d73c1fb314610be4578063dd62ed3e14610c04578063e436744514610c5057610312565b8063bbefa83a116100ba578063bbefa83a14610b92578063c4d66de814610ba6578063c87b56dd14610bc557610312565b8063af6900c314610b40578063b19de39f14610b54578063b698206914610b7357610312565b806370a08231116101425780638da5cb5b1161011c5780638da5cb5b14610af557806395d89b4114610b0d578063a9059cbb14610b2157610312565b806370a0823114610a88578063715018a614610ad957806375b238fc14610ae157610312565b80635a446215116101735780635a44621514610a3c5780635d148e5c14610a5b5780636338cb8a14610a7457610312565b806353df5c7c14610a0157806354d1f13d14610a1557806355f804b314610a1d57610312565b8063274e430b1161025d57806347f618a511610206578063514e62fc116101e0578063514e62fc146109725780635327bba3146109a757806353d6fd59146109e257610312565b806347f618a5146109075780634a4ee7b1146109265780634ef41efc1461093957610312565b8063313ce56711610237578063313ce567146108c15780633af32abf146108d45780633ccfd60b146108f357610312565b8063274e430b146108525780632a6a935d146108715780632de948071461089057610312565b8063183a4f6e116102bf57806323b848ff1161029957806323b848ff1461081757806323b872dd1461082b578063256929621461084a57610312565b8063183a4f6e146107bc5780631c10893f146107cf5780631cd64df4146107e257610312565b8063095ea7b3116102f0578063095ea7b314610734578063180434a31461076357806318160ddd1461078157610312565b806304dfe79d146106da57806306fdde031461071357610312565b3661031257005b68a20d6e21d0e52553085f3560e01c63e985e9c58190036103b45760018201546001600160a01b0316331461035a5760405163ce5a776b60e01b815260040160405180910390fd5b6044361015610367575f80fd5b6004356001600160a01b038181165f908152600385016020908152604080832060243594851684529091529020546103b19060ff166103a6575f6103a9565b60015b60ff16610cc8565b50505b80636352211e036104185760018201546001600160a01b031633146103ec5760405163ce5a776b60e01b815260040160405180910390fd5b60243610156103f9575f80fd5b60043561041661040882610cd0565b6001600160a01b0316610cc8565b505b8063e5eb36c8036104845760018201546001600160a01b031633146104505760405163ce5a776b60e01b815260040160405180910390fd5b608436101561045d575f80fd5b60043560243560443560643561047584848484610d06565b61047f6001610cc8565b505050505b8063813500fc0361051c5760018201546001600160a01b031633146104bc5760405163ce5a776b60e01b815260040160405180910390fd5b60643610156104c9575f80fd5b6001600160a01b036044358181165f90815268a20d6e21d0e525530b6020908152604080832060043595861684529091529020805460ff19166024351515908117909155906105186001610cc8565b5050505b8063d10b6e0c0361057c5760018201546001600160a01b031633146105545760405163ce5a776b60e01b815260040160405180910390fd5b6064361015610561575f80fd5b600435602435604435610578610408848484610d4d565b5050505b8063081812fc036105d25760018201546001600160a01b031633146105b45760405163ce5a776b60e01b815260040160405180910390fd5b60243610156105c1575f80fd5b6004356105d061040882610e59565b505b8063f5b100ea036106585760018201546001600160a01b0316331461060a5760405163ce5a776b60e01b815260040160405180910390fd5b6024361015610617575f80fd5b600435610656610651826001600160a01b03165f90815268a20d6e21d0e5255310602052604090205463ffffffff600160801b9091041690565b610cc8565b505b8063e2c79281036106c35760018201546001600160a01b031633146106905760405163ce5a776b60e01b815260040160405180910390fd5b600436101561069d575f80fd5b68a20d6e21d0e5255308546106c39068010000000000000000900463ffffffff16610cc8565b8063b7a94eb8036106d8576106d86001610cc8565b005b3480156106e5575f80fd5b506003546106fc9065010000000000900460ff1681565b60405160ff90911681526020015b60405180910390f35b34801561071e575f80fd5b50610727610ea3565b60405161070a9190612a32565b34801561073f575f80fd5b5061075361074e366004612a94565b610f32565b604051901515815260200161070a565b34801561076e575f80fd5b5060035461075390610100900460ff1681565b34801561078c575f80fd5b5068a20d6e21d0e525530854600160601b90046bffffffffffffffffffffffff165b60405190815260200161070a565b6106d86107ca366004612abc565b610fa6565b6106d86107dd366004612a94565b610fb3565b3480156107ed575f80fd5b506107536107fc366004612a94565b638b78c6d8600c9081525f9290925260209091205481161490565b348015610822575f80fd5b506106d8610fc9565b348015610836575f80fd5b50610753610845366004612ad3565b610fec565b6106d86110a5565b34801561085d575f80fd5b5061075361086c366004612b0c565b6110f2565b34801561087c575f80fd5b506106d861088b366004612b34565b611140565b34801561089b575f80fd5b506107ae6108aa366004612b0c565b638b78c6d8600c9081525f91909152602090205490565b3480156108cc575f80fd5b5060126106fc565b3480156108df575f80fd5b506107536108ee366004612b0c565b61114a565b3480156108fe575f80fd5b506106d8611187565b348015610912575f80fd5b506003546107539062010000900460ff1681565b6106d8610934366004612a94565b61119b565b348015610944575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b03909116815260200161070a565b34801561097d575f80fd5b5061075361098c366004612a94565b638b78c6d8600c9081525f9290925260209091205416151590565b3480156109b2575f80fd5b506003546109cd906601000000000000900463ffffffff1681565b60405163ffffffff909116815260200161070a565b3480156109ed575f80fd5b506106d86109fc366004612b4d565b6111ad565b348015610a0c575f80fd5b506106d86111f2565b6106d861120d565b348015610a28575f80fd5b506106d8610a37366004612bbc565b611246565b348015610a47575f80fd5b506106d8610a56366004612bfb565b611282565b348015610a66575f80fd5b506003546107539060ff1681565b348015610a7f575f80fd5b506106d86112d8565b348015610a93575f80fd5b506107ae610aa2366004612b0c565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902054600160a01b90046bffffffffffffffffffffffff1690565b6106d86112f5565b348015610aec575f80fd5b506107ae600181565b348015610b00575f80fd5b50638b78c6d8195461095a565b348015610b18575f80fd5b50610727611308565b348015610b2c575f80fd5b50610753610b3b366004612a94565b611317565b348015610b4b575f80fd5b506106d861132c565b348015610b5f575f80fd5b506106d8610b6e366004612c62565b61134d565b348015610b7e575f80fd5b506106d8610b8d366004612c85565b6113af565b348015610b9d575f80fd5b506106d861140b565b348015610bb1575f80fd5b506106d8610bc0366004612b0c565b61142a565b348015610bd0575f80fd5b50610727610bdf366004612abc565b611462565b348015610bef575f80fd5b50600354610753906301000000900460ff1681565b348015610c0f575f80fd5b506107ae610c1e366004612ca5565b6001600160a01b039182165f90815268a20d6e21d0e525530d6020908152604080832093909416825291909152205490565b348015610c5b575f80fd5b5060035461075390640100000000900460ff1681565b6106d8610c7f366004612b0c565b611573565b6106d8610c92366004612b0c565b6115ad565b348015610ca2575f80fd5b506107ae610cb1366004612b0c565b63389a75e1600c9081525f91909152602090205490565b805f5260205ff35b5f610cda826115d3565b610cf75760405163677510db60e11b815260040160405180910390fd5b610d00826115ef565b92915050565b610d1284848484611642565b610d1c8484611a85565b826001600160a01b0316846001600160a01b031614610d4757610d4784670de0b6b3a7640000611ba2565b50505050565b5f68a20d6e21d0e52553088168a20d6e21d0e525530a81610d9968a20d6e21d0e525530f600189901b5b600381901c5f90815260209290925260409091205460059190911b60e0161c90565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116915084168114610e24576001600160a01b038082165f90815260038401602090815260408083209388168352929052205460ff16610e24576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8581526004909201602052604090912080546001600160a01b0387166001600160a01b031990911617905590509392505050565b5f610e63826115d3565b610e805760405163677510db60e11b815260040160405180910390fd5b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f8054610eb190612ccd565b80601f0160208091040260200160405190810160405280929190818152602001828054610edd90612ccd565b8015610f285780601f10610eff57610100808354040283529160200191610f28565b820191905f5260205f20905b815481529060010190602001808311610f0b57829003601f168201915b5050505050905090565b5f8068a20d6e21d0e5255308335f81815260058301602090815260408083206001600160a01b038a16808552908352928190208890555187815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b610fb03382611c83565b50565b610fbb611c8e565b610fc58282611ca8565b5050565b6001610fd481611cb4565b506003805464ff000000001916640100000000179055565b6001600160a01b0383165f90815268a20d6e21d0e525530d6020908152604080832033845290915281205468a20d6e21d0e5255308905f19811461108e5780841115611064576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386165f9081526005830160209081526040808320338452909152902084820390555b611099868686611ce5565b50600195945050505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054600160581b9004600116820361112d57823b5b9392505050565b54600160581b9004600216151592915050565b610fb03382611d1d565b6001600160a01b0381165f90815268a20d6e21d0e52553106020526040812054610d00906affffffffffffffffffffff165b60571c600116151590565b600161119281611cb4565b610fb033611db4565b6111a3611c8e565b610fc58282611c83565b60016111b881611cb4565b6003546301000000900460ff16156111e3576040516303cb96db60e21b815260040160405180910390fd5b6111ed8383611dcd565b505050565b60016111fd81611cb4565b506003805460ff19166001179055565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b600161125181611cb4565b60035460ff1615611275576040516303cb96db60e21b815260040160405180910390fd5b6002610d47838583612d57565b600161128d81611cb4565b600354610100900460ff16156112b6576040516303cb96db60e21b815260040160405180910390fd5b5f6112c2858783612d57565b5060016112d0838583612d57565b505050505050565b60016112e381611cb4565b506003805461ff001916610100179055565b6112fd611c8e565b6113065f611e63565b565b606060018054610eb190612ccd565b5f611323338484611ce5565b50600192915050565b600161133781611cb4565b506003805463ff00000019166301000000179055565b600161135881611cb4565b60035462010000900460ff1615611382576040516303cb96db60e21b815260040160405180910390fd5b506003805463ffffffff90921666010000000000000269ffffffff00000000000019909216919091179055565b60016113ba81611cb4565b600354640100000000900460ff16156113e6576040516303cb96db60e21b815260040160405180910390fd5b506003805460ff909216650100000000000265ff000000000019909216919091179055565b600161141681611cb4565b506003805462ff0000191662010000179055565b600161143581611cb4565b5f611449670de0b6b3a76400006001612e25565b905033611457828286611ea0565b610d47816001611dcd565b606061146d826115d3565b61148a5760405163677510db60e11b815260040160405180910390fd5b6002805461149790612ccd565b15905061156e57610d00600280546114ae90612ccd565b80601f01602080910402602001604051908101604052809291908181526020018280546114da90612ccd565b80156115255780601f106114fc57610100808354040283529160200191611525565b820191905f5260205f20905b81548152906001019060200180831161150857829003601f168201915b50505050506040518060400160405280600481526020017f7b69647d0000000000000000000000000000000000000000000000000000000081525061156985612093565b6120d5565b919050565b61157b611c8e565b63389a75e1600c52805f526020600c2080544211156115a157636f5e88185f526004601cfd5b5f9055610fb081611e63565b6115b5611c8e565b8060601b6115ca57637448fbae5f526004601cfd5b610fb081611e63565b5f806115de836115ef565b6001600160a01b0316141592915050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a8261161c68a20d6e21d0e525530f600187901b610d77565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b68a20d6e21d0e52553086001600160a01b03841661167357604051633a954ecd60e21b815260040160405180910390fd5b5f816002015f61168a84600701610d778860011b90565b63ffffffff16815260208101919091526040015f20546001600160a01b039081169150861681146116e7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b0316836001600160a01b031614611782576001600160a01b038087165f90815260038401602090815260408083209387168352929052205460ff16611782575f8481526004830160205260409020546001600160a01b03848116911614611782576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61178c876121f5565b90505f611798876121f5565b8254909150670de0b6b3a76400009083906014906117cc908490600160a01b90046bffffffffffffffffffffffff16612e3c565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915582546001600160a01b038116670de0b6b3a7640000600160a01b92839004841601909216021782555061186260078501600188901b611830848b612268565b826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b5f868152600485016020908152604080832080546001600160a01b03191690556001600160a01b038b168352600687018252808320855463ffffffff60801b198116600160801b9182900463ffffffff9081165f1901908116909202178755631fffffff600382901c168552925282205460059190911b60e0161c6001600160a01b038a165f908152600687016020526040902063ffffffff919091169150611950906119176007880160018b811b01610d77565b63ffffffff1683826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b8154600163ffffffff600160801b80840482169283019091160263ffffffff60801b199092169190911783556119a26007870161199084600190811b0190565b61183060078a0160018d811b01610d77565b6001600160a01b0389165f9081526006870160209081526040808320909152600383901c82529020805460e0600584901b1681811c8b1863ffffffff16901b189055611a246007870160018a811b0183826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b5050866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051611a7391815260200190565b60405180910390a35050505050505050565b60035465010000000000900460ff165f819003611aa157505050565b6001600160a01b0382165f90815268a20d6e21d0e52553106020526040902054670de0b6b3a7640000820290600160a01b90046bffffffffffffffffffffffff1611611aec57505050565b611b2261117c836001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b15611b2c57505050565b638b78c6d819546001600160a01b0316836001600160a01b031603611b5057505050565b638b78c6d8600c9081525f849052602090205460011615611b7057505050565b6040517f0f2acbfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003546601000000000000900463ffffffff165f819003611bc257505050565b5f80611c0e84611bfb876001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b6affffffffffffffffffffff1690612320565b9150915060028110611c3b5780800283026301312d00808210611c2f578091505b611c3882612394565b50505b6001600160a01b0385165f90815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166affffffffffffffffffffff84161790555b5050505050565b610fc582825f6123c7565b638b78c6d819543314611306576382b429005f526004601cfd5b610fc5828260016123c7565b638b78c6d819543314610fb057638b78c6d8600c52335f52806020600c205416610fb0576382b429005f526004601cfd5b611cf083838361241e565b611cfa8383611a85565b816001600160a01b0316836001600160a01b0316146111ed576111ed8382611ba2565b5f611d27836121f5565b8054909150600160581b9004600216151582151514611d6a57805460ff600160581b8083048216600218909116026bff0000000000000000000000199091161781555b826001600160a01b03167fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039383604051611da7911515815260200190565b60405180910390a2505050565b5f385f3847855af1610fb05763b12d13eb5f526004601cfd5b610fc582611e1b83611e08866001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b6affffffffffffffffffffff16906129a2565b6001600160a01b03919091165f90815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166affffffffffffffffffffff909216919091179055565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b68a20d6e21d0e52553088054640100000000900463ffffffff1615611ef1576040517fead4d2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611f31576040517f39a84a7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f3a826129ce565b805467ffffffff0000000019166401000000001781556001810180546001600160a01b0384166001600160a01b03199091161790558315610d47576001600160a01b038316611f9c57604051633a954ecd60e21b815260040160405180910390fd5b6b0de0b6b39983494c589bffff841115611fe2576040517fe5cfe95700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16600160601b6bffffffffffffffffffffffff8616021781555f612028846121f5565b80546001600160a01b03908116600160a01b6bffffffffffffffffffffffff8916021782556040518781529192508516905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611c7c846001611d1d565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a9004806120ac575050819003601f19909101908152919050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116121a5576001838203015f6020851061211557508388205b601f851660200360031b89515b8b51818118831c61218c57831561215c5783888e201461215c57808a5260019c8d019c90990198848d1061215657506121a0565b50612122565b5f5b8b8101518b82015260200187811061215e57509b87019b98860198871561218c57848d1061215657506121a0565b895260019b8c019b90980197838c10612122575b505050505b84935060206040510194508781038585030192505b808810156121d55787518452602097880197909301926121ba565b50505f818401908152602001604052601f19909201918252509392505050565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054909168a20d6e21d0e525530891600160581b90046001169003612262576001833b15612240576002175b825460ff909116600160581b026bff0000000000000000000000199091161782555b50919050565b8154600160601b900463ffffffff1668a20d6e21d0e52553085f82900361231957805481905f9061229e9063ffffffff16612e61565b825463ffffffff8083166101009490940a848102910219909116179092558554600160601b82027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff9091161786555f908152600283016020526040902080546001600160a01b0386166001600160a01b031990911617905591505b5092915050565b5f80605784901c6001161561233957508290505f61238d565b637fffffff620151804204811690603886901c1666ffffffffffffff861681831461236457508190505f5b60389190911b66ffffffffffffff602887901c811692909201918216179350620de0b690049150505b9250929050565b80600117601052605b810460788211025f5b8181146123bc57601080802090526001016123a6565b5050601051610fb057fe5b638b78c6d8600c52825f526020600c208054838117836123e8575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3505050505050565b6001600160a01b03821661244557604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e52553085f612459856121f5565b90505f612465856121f5565b905061249a6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b825463ffffffff600160801b808304821660808501528454041660a08301526bffffffffffffffffffffffff600160a01b909104166040820181905285111561250f576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810180518690039081905283546bffffffffffffffffffffffff808316600160a01b9081026001600160a01b03938416178755855481810483168a0160608701819052909216029116178355608082015161257d91670de0b6b3a7640000906064020480821191030290565b81528154600160581b90046002165f036125ee57856001600160a01b0316876001600160a01b0316036125b857805160808201510360a08201525b6125e8670de0b6b3a76400008260600151606402816125d9576125d9612e83565b048260a0015180821191030290565b60208201525b5f6126358260200151835f01510160408051808201909152606081525f60208201526040805101828152806020018360051b81016040528183528083602001525050919050565b82519091501561275c576001600160a01b0388165f908152600686016020526040902060808301518351875463ffffffff6801000000000000000080830482168490038216026bffffffff0000000000000000199092169190911789558754918303908116600160801b0263ffffffff60801b199092169190911787555b5f1991909101600381901c5f90815260208490526040812054919291600584901b60e0161c60078a01602052633fffffff600282901c165f90815260409020805460c0600684901b1681811c67ffffffffffffffff16901b18905563ffffffff1690505f81815260048a016020908152604090912080546001600160a01b0319169055858101805160608f901b600885901b1760011781529091019052508082036126b3575050505b60208201511561292a576001600160a01b0387165f9081526006860160209081526040822060a08501519185015190929082019061279a878c612268565b895460208801516801000000000000000080830463ffffffff9081169092018216026bffffffff0000000000000000198316178c558954858216600160801b0263ffffffff60801b19909116178a55919250670de0b6b3a7640000600160601b82046bffffffffffffffffffffffff908116606402160491640100000000909104165b61282e8b600701610d778360011b90565b63ffffffff161561284d5760010181811115612848575060015b61281d565b6020869052600385901c5f90815260409020805460e0600588901b1681811c841863ffffffff16901b18905560078b016020908152600282901c5f90815260409020805460c0600685901b1681811c9389901b63ffffffff8816179390931867ffffffffffffffff1690921b90911890556001909401936128ed878e835f8360200151818360081b8560601b171781526020810185602001525050505050565b600101818111156128fc575060015b83850361281d578a5463ffffffff9091166401000000000267ffffffff0000000019909116178a5550505050505b8051511561294b57600185015461294b9082906001600160a01b03166129fb565b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161299191815260200190565b60405180910390a350505050505050565b5f6001605784901c161515821515146129c7576a800000000000000000000092909218915b5090919050565b630f4599e55f523360205260205f6024601c5f855af160015f511416610fb05763d125259c5f526004601cfd5b81516040810363263c69d68152602080820152815160051b604401915060208183601c84015f875af1600182511416610d47575f81fd5b5f602080835283518060208501525f5b81811015612a5e57858101830151858201604001528201612a42565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461156e575f80fd5b5f8060408385031215612aa5575f80fd5b612aae83612a7e565b946020939093013593505050565b5f60208284031215612acc575f80fd5b5035919050565b5f805f60608486031215612ae5575f80fd5b612aee84612a7e565b9250612afc60208501612a7e565b9150604084013590509250925092565b5f60208284031215612b1c575f80fd5b61112682612a7e565b8035801515811461156e575f80fd5b5f60208284031215612b44575f80fd5b61112682612b25565b5f8060408385031215612b5e575f80fd5b612b6783612a7e565b9150612b7560208401612b25565b90509250929050565b5f8083601f840112612b8e575f80fd5b50813567ffffffffffffffff811115612ba5575f80fd5b60208301915083602082850101111561238d575f80fd5b5f8060208385031215612bcd575f80fd5b823567ffffffffffffffff811115612be3575f80fd5b612bef85828601612b7e565b90969095509350505050565b5f805f8060408587031215612c0e575f80fd5b843567ffffffffffffffff80821115612c25575f80fd5b612c3188838901612b7e565b90965094506020870135915080821115612c49575f80fd5b50612c5687828801612b7e565b95989497509550505050565b5f60208284031215612c72575f80fd5b813563ffffffff81168114611126575f80fd5b5f60208284031215612c95575f80fd5b813560ff81168114611126575f80fd5b5f8060408385031215612cb6575f80fd5b612cbf83612a7e565b9150612b7560208401612a7e565b600181811c90821680612ce157607f821691505b60208210810361226257634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b601f8211156111ed57805f5260205f20601f840160051c81016020851015612d385750805b601f840160051c820191505b81811015611c7c575f8155600101612d44565b67ffffffffffffffff831115612d6f57612d6f612cff565b612d8383612d7d8354612ccd565b83612d13565b5f601f841160018114612db4575f8515612d9d5750838201355b5f19600387901b1c1916600186901b178355611c7c565b5f83815260208120601f198716915b82811015612de35786850135825560209485019460019092019101612dc3565b5086821015612dff575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d0057610d00612e11565b6bffffffffffffffffffffffff82811682821603908082111561231957612319612e11565b5f63ffffffff808316818103612e7957612e79612e11565b6001019392505050565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220a42479f0ba8eecd874ff5d12e1b47a24ad1df2dc43f2913de2e6db2deb4baf9d64736f6c63430008180033697066733a2f2f516d626241446f767a64413967346f746a6150707542644e7a32726f4152653331693134324d576571566b79456d2f7b69647d2e6a736f6e0000000000000000000000001f743779b6a5648ffbfa406fca40d13758d420ca