0x61010060405234801561001157600080fd5b506040516121fe3803806121fe833981016040819052610030916100eb565b60018183856001600160a01b0381163b61005d5760405163028bba2560e61b815260040160405180910390fd5b6001600160a01b0390811660805281163b61008b5760405163de58082760e01b815260040160405180910390fd5b6001600160a01b0390811660a05281163b6100b957604051631341312360e01b815260040160405180910390fd5b6001600160a01b031660c052151560e05250610138915050565b6001600160a01b03811681146100e857600080fd5b50565b60008060006060848603121561010057600080fd5b835161010b816100d3565b602085015190935061011c816100d3565b604085015190925061012d816100d3565b809150509250925092565b60805160a05160c05160e0516120566101a860003960006109c301526000818161013f015281816105ff0152610dc301526000818160d20152818161022a01528181610ed601528181610fb101526110d60152600081816102d20152818161074f015261100401526120566000f3fe6080604052600436106100b55760003560e01c80638fc4445211610069578063e4869a561161004e578063e4869a56146102a3578063f7a2da23146102c3578063fb5334f3146102f657600080fd5b80638fc444521461024e578063d5853a251461026e57600080fd5b8063551edbc61161009a578063551edbc61461019c5780636f156f1d146101bc578063895633ba1461021b57600080fd5b8063228b131814610130578063337fae591461018957600080fd5b3661012b573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610129576040517faa39384e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561013c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610129610197366004611c54565b610323565b3480156101a857600080fd5b506101296101b7366004611c9e565b61081b565b3480156101c857600080fd5b5061020d6101d7366004611cb7565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152620f6d3760209081526040808320938352929052205490565b604051908152602001610180565b34801561022757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061015f565b34801561025a57600080fd5b5061020d610269366004611ce3565b61090c565b34801561027a57600080fd5b5061028e610289366004611d22565b6109a2565b60408051928352602083019190915201610180565b3480156102af57600080fd5b5061020d6102be366004611d44565b610a1a565b3480156102cf57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061015f565b34801561030257600080fd5b50610316610311366004611d96565b610b0c565b6040516101809190611dc6565b6000848152620f944760205260409020600281015474010000000000000000000000000000000000000000900464ffffffffff164210156103bb5760028101546040517f928a5e070000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910464ffffffffff1660048201526024015b60405180910390fd5b805473ffffffffffffffffffffffffffffffffffffffff16610409576040517f11378a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610443576040517fd7028da000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610490576040517f285a366d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805460009081906104c7907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16876109a2565b90925090506104e1336104da8385611ea2565b6000610e81565b825460018401546040517ff242432a00000000000000000000000000000000000000000000000000000000815260006004820181905273ffffffffffffffffffffffffffffffffffffffff89811660248401526044830193909352606482018a905260a0608483015260a482015291169063f242432a9060c401600060405180830381600087803b15801561057557600080fd5b505af1158015610589573d6000803e3d6000fd5b5050845460018601546040517f3221782100000000000000000000000000000000000000000000000000000000815260006004820181905273ffffffffffffffffffffffffffffffffffffffff9384166024830152604482019290925289831660648201526084810187905290935083925082917f0000000000000000000000000000000000000000000000000000000000000000169063322178219060a4016060604051808303816000875af1158015610648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066c9190611ecc565b90935091505073ffffffffffffffffffffffffffffffffffffffff8216156106c55761271061069f61ffff831687611f0a565b6106a99190611f21565b92506106b58386611f5c565b94506106c5828462033450610fa2565b505060028401546106f09073ffffffffffffffffffffffffffffffffffffffff168462033450610fa2565b600073ffffffffffffffffffffffffffffffffffffffff86161561073557610719600284611f21565b90506107258184611f5c565b9250610735868262033450610fa2565b61077573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168461118b565b8454604080518a8152740100000000000000000000000000000000000000009092046bffffffffffffffffffffffff1660208301528101859052606081018390526080810184905260a0810182905273ffffffffffffffffffffffffffffffffffffffff87811691908916908b907f9f74a211fa45811c1ff97bcaf3084db1339fee047ade1bd38acd52211afc834a9060c00160405180910390a4505050505050505050565b6000818152620f944760205260409020600281015473ffffffffffffffffffffffffffffffffffffffff1661087c576040517f11378a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805461089e9073ffffffffffffffffffffffffffffffffffffffff16336112e5565b805460018201546108c59173ffffffffffffffffffffffffffffffffffffffff16906113f0565b506000908152620f944760205260408120818155600181019190915560020180547fffffffffffffff00000000000000000000000000000000000000000000000000169055565b6000848152620f944760205260408120805473ffffffffffffffffffffffffffffffffffffffff1661096a576040517f11378a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054600182015461099891889173ffffffffffffffffffffffffffffffffffffffff90911690888888611458565b9695505050505050565b6000806109b6836602d79883d20000611f0a565b9050831580156109e357507f00000000000000000000000000000000000000000000000000000000000000005b15610a06576109f3600282611f21565b91506109ff8282611f5c565b9050610a13565b610a108385611f0a565b91505b9250929050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152620f6d37602090815260408083208784529091529020548015610a88576040517f7bec12a0000000000000000000000000000000000000000000000000000000008152600481018290526024016103b2565b610ac873ffffffffffffffffffffffffffffffffffffffff87167fd9b67a26000000000000000000000000000000000000000000000000000000006117cb565b610afe576040517f49bedeb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610998818787878787611458565b610b95604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000838152620f94476020908152604091829020825160a08082018552825473ffffffffffffffffffffffffffffffffffffffff8082168085526bffffffffffffffffffffffff7401000000000000000000000000000000000000000093849004168588018190526001870154868a018190526002909701549283166060870181905264ffffffffff94909304939093166080808701829052948a01529288015294860194909452918401528183529015610e7a57805160408083015190517f92d0ebf600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216916392d0ebf691610ca69160040190815260200190565b6040805180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce69190611f6f565b606084015260c08301526020810151610d0e906bffffffffffffffffffffffff1660016109a2565b61014084015260e083015273ffffffffffffffffffffffffffffffffffffffff831615610d65576002826101400151610d479190611f21565b610100830181905261014083018051610d61908390611f5c565b9052505b805160408083015190517f8f40f37800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600060448201819052917f00000000000000000000000000000000000000000000000000000000000000001690638f40f378906064016040805180830381865afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611f93565b91505061ffff811615610e78576127108161ffff168460e00151610e519190611f0a565b610e5b9190611f21565b610120840181905260e084018051610e74908390611f5c565b9052505b505b5092915050565b34821115610f37576040517f452f2b8f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015234840360248301527f0000000000000000000000000000000000000000000000000000000000000000169063452f2b8f90604401600060405180830381600087803b158015610f1a57600080fd5b505af1158015610f2e573d6000803e3d6000fd5b50505050505050565b34821015610f68578015610f6d57610f6873ffffffffffffffffffffffffffffffffffffffff84163484900361118b565b505050565b6040517fabf2f33b000000000000000000000000000000000000000000000000000000008152600481018390526024016103b2565b81600003610faf57505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611026577f000000000000000000000000000000000000000000000000000000000000000092505b60008373ffffffffffffffffffffffffffffffffffffffff16838390604051600060405180830381858888f193505050503d8060008114611083576040519150601f19603f3d011682016040523d82523d6000602084013e611088565b606091505b5050905080611185576040517faa67c91900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063aa67c9199085906024016000604051808303818588803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b50505050508373ffffffffffffffffffffffffffffffffffffffff167fa2201512569adb2d513531dfd69b66df50bd5cffb8c1bbe65a4611f9e1eadbd18460405161117c91815260200190565b60405180910390a25b50505050565b804710156111f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016103b2565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461124f576040519150601f19603f3d011682016040523d82523d6000602084013e611254565b606091505b5050905080610f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016103b2565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156113b557506040517f91d148540000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff82811660248301528316906391d1485490604401602060405180830381865afa15801561138f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b39190611fbf565b155b156113ec576040517f99181b9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152620f6d37602090815260408083208484529091528082208054908390559051909182917f1f70c4ca742754ce32285e8893c0164fe53e45865c8eab2492893552a07e9c559190a2505050565b6040517f92d0ebf6000000000000000000000000000000000000000000000000000000008152600481018590528690600090819073ffffffffffffffffffffffffffffffffffffffff8916906392d0ebf6906024016040805180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed9190611f6f565b915091508060000361152b576040517ffbbeeb7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611578576040517f0991f71f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611588574293506115c5565b818411156115c5576040517feab1694c000000000000000000000000000000000000000000000000000000008152600481018390526024016103b2565b6115d08833866117f0565b88158061161257506000898152620f944760205260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686115b1561162457611621888861188b565b92505b6040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff16815260200161165488611935565b6bffffffffffffffffffffffff1681526020018881526020018673ffffffffffffffffffffffffffffffffffffffff1681526020014286116116975760006116a0565b6116a08661198b565b64ffffffffff9081169091526000858152620f944760209081526040918290208451918501516bffffffffffffffffffffffff167401000000000000000000000000000000000000000090810273ffffffffffffffffffffffffffffffffffffffff938416178255858401516001830155606086015160029092018054608090970151909516027fffffffffffffff0000000000000000000000000000000000000000000000000090951690821617939093179091555184918991908b16907f8536db4b44245f8a17fb344184146f78688a6f8e33670eff6ad85831ac7dc33b906117b7908b908b908b9092835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b60405180910390a450509695505050505050565b60006117d6836119d6565b80156117e757506117e78383611a3a565b90505b92915050565b6303c267004201811115611838576040517f77e1d3c7000000000000000000000000000000000000000000000000000000008152426303c267000160048201526024016103b2565b61184181421190565b15611878576040517ffc52dce000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188283836112e5565b610f6883611b28565b73ffffffffffffffffffffffffffffffffffffffff82166000908152620f6d37602090815260408083208484529091528120546118c6611c15565b915080156118fc57604051829082907fa56b710ce6260057e438635e20c832703e4b5e712d1449b00caccea05e832bc690600090a35b5073ffffffffffffffffffffffffffffffffffffffff9092166000908152620f6d37602090815260408083209383529290522081905590565b60006bffffffffffffffffffffffff821115611987576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260606004820152602481018390526044016103b2565b5090565b600064ffffffffff821115611987576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260286004820152602481018390526044016103b2565b6000611a02827f01ffc9a700000000000000000000000000000000000000000000000000000000611a3a565b80156117ea5750611a33827fffffffff00000000000000000000000000000000000000000000000000000000611a3a565b1592915050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000821660248201526000908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015611b11575060208210155b8015611b1d5750600081115b979650505050505050565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6600482015230602482015273ffffffffffffffffffffffffffffffffffffffff8216906391d1485490604401602060405180830381865afa158015611bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdc9190611fbf565b611c12576040517f0de5a71e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6000620f462760008154611c2890611fe8565b9182905550919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611c1257600080fd5b60008060008060808587031215611c6a57600080fd5b84359350602085013592506040850135611c8381611c32565b91506060850135611c9381611c32565b939692955090935050565b600060208284031215611cb057600080fd5b5035919050565b60008060408385031215611cca57600080fd5b8235611cd581611c32565b946020939093013593505050565b60008060008060808587031215611cf957600080fd5b84359350602085013592506040850135611d1281611c32565b9396929550929360600135925050565b60008060408385031215611d3557600080fd5b50508035926020909101359150565b600080600080600060a08688031215611d5c57600080fd5b8535611d6781611c32565b945060208601359350604086013592506060860135611d8581611c32565b949793965091946080013592915050565b60008060408385031215611da957600080fd5b823591506020830135611dbb81611c32565b809150509250929050565b815173ffffffffffffffffffffffffffffffffffffffff16815261016081016020830151602083015260408301516040830152606083015160608301526080830151611e2a608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525061014080840151818401525092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156117ea576117ea611e73565b805161ffff81168114611ec757600080fd5b919050565b600080600060608486031215611ee157600080fd5b835192506020840151611ef381611c32565b9150611f0160408501611eb5565b90509250925092565b80820281158282048414176117ea576117ea611e73565b600082611f57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156117ea576117ea611e73565b60008060408385031215611f8257600080fd5b505080516020909101519092909150565b60008060408385031215611fa657600080fd5b82519150611fb660208401611eb5565b90509250929050565b600060208284031215611fd157600080fd5b81518015158114611fe157600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361201957612019611e73565b506001019056fea2646970667358221220d2110a2dfd0cbc383ea67116df849c6169647ffcf2afef0e74951b509d772cfe64736f6c6343000819003300000000000000000000000067df244584b67e8c51b10ad610aaffa9a402fdb600000000000000000000000049128cf8abe9071ee24540a296b5ded3f9d5044300000000000000000000000069525dac489e4718964b5615c3d794a25d62beb7