0x60c060405261c35060a05234801561001657600080fd5b504360805260805160a051611c616100406000396000610db6015260006103640152611c616000f3fe6080604052600436106101295760003560e01c806360fcef7c116100a5578063a692979311610074578063e445e7dd11610059578063e445e7dd146103f1578063e5320bb91461040d578063f2fde38b1461043d57600080fd5b8063a6929793146103b1578063aaccd230146103d157600080fd5b806360fcef7c146102f4578063715018a61461033d57806382ea7bfe146103525780638da5cb5b1461038657600080fd5b806338af3eed116100fc578063485cc955116100e1578063485cc9551461029f57806348f4e6c1146102bf5780634e71d92d146102df57600080fd5b806338af3eed146101a957806343c467c0146101fb57600080fd5b8063086011b91461012e57806311bf2c18146101435780631c31f7101461015657806326d5b1a614610176575b600080fd5b61014161013c3660046115f9565b61045d565b005b6101416101513660046116a0565b61050a565b34801561016257600080fd5b506101416101713660046116e8565b6106a4565b34801561018257600080fd5b50610196610191366004611705565b6106b8565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506066546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a0565b34801561020757600080fd5b5061026661021636600461172f565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff8116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016101a0565b3480156102ab57600080fd5b506101416102ba36600461174a565b610708565b3480156102cb57600080fd5b506101416102da366004611783565b6108af565b3480156102eb57600080fd5b50610141610959565b34801561030057600080fd5b5061031461030f36600461172f565b610a23565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016101a0565b34801561034957600080fd5b50610141610b56565b34801561035e57600080fd5b506101967f000000000000000000000000000000000000000000000000000000000000000081565b34801561039257600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101d6565b3480156103bd57600080fd5b506101966103cc366004611705565b610b6a565b3480156103dd57600080fd5b506101966103ec3660046115f9565b610bd3565b3480156103fd57600080fd5b50604051600481526020016101a0565b34801561041957600080fd5b5061042d6104283660046117f8565b610c80565b60405190151581526020016101a0565b34801561044957600080fd5b506101416104583660046116e8565b610ca2565b6104678484610c80565b6104f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4162737472616374506f73744469737061746368486f6f6b3a20696e76616c6960448201527f64206d657461646174612076617269616e74000000000000000000000000000060648201526084015b60405180910390fd5b61050484848484610d56565b50505050565b60006105168484610b6a565b9050803410156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4947503a20696e73756666696369656e7420696e746572636861696e2067617360448201527f207061796d656e7400000000000000000000000000000000000000000000000060648201526084016104ef565b60006105b48234611869565b905080156106595773ffffffffffffffffffffffffffffffffffffffff8316610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f20726566756e64206164647265737300000000000000000000000000000060448201526064016104ef565b61065973ffffffffffffffffffffffffffffffffffffffff841682610df0565b604080518581526020810184905263ffffffff87169188917f65695c3748edae85a24cc2c60b299b31f463050bc259150d2e5802ec8d11720a910160405180910390a3505050505050565b6106ac610f4a565b6106b581610fcb565b50565b63ffffffff82166000908152606560205260408120546106ff9083907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1661187c565b90505b92915050565b600054610100900460ff16158080156107285750600054600160ff909116105b806107425750303b158015610742575060005460ff166001145b6107ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104ef565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561082c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610834611044565b61083d836110e3565b61084682610fcb565b80156108aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b505050565b6108b7610f4a565b8060005b81811015610504576109478484838181106108d8576108d861188f565b6108ee926020606090920201908101915061172f565b8585848181106109005761090061188f565b61091992604060609092020190810191506020016116e8565b86868581811061092b5761092b61188f565b6109429260609182020190810191506040016118be565b61115a565b80610951816118ec565b9150506108bb565b60665460405160009173ffffffffffffffffffffffffffffffffffffffff169047908381818185875af1925050503d80600081146109b3576040519150601f19603f3d011682016040523d82523d6000602084013e6109b8565b606091505b50509050806106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4947503a20636c61696d206661696c656400000000000000000000000000000060448201526064016104ef565b63ffffffff81166000818152606560205260408120549091829173ffffffffffffffffffffffffffffffffffffffff169081151590610a6190611207565b604051602001610a719190611948565b60405160208183030381529060405290610ab8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ef91906119b3565b506040517f60fcef7c00000000000000000000000000000000000000000000000000000000815263ffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff8216906360fcef7c906024016040805180830381865afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c9190611a24565b9250925050915091565b610b5e610f4a565b610b6860006110e3565b565b6000806000610b7885610a23565b90925090506000610b9b6fffffffffffffffffffffffffffffffff831686611a57565b90506402540be400610bbf6fffffffffffffffffffffffffffffffff851683611a57565b610bc99190611a6e565b9695505050505050565b6000610bdf8585610c80565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4162737472616374506f73744469737061746368486f6f6b3a20696e76616c6960448201527f64206d657461646174612076617269616e74000000000000000000000000000060648201526084016104ef565b610c77858585856112c5565b95945050505050565b60008115806106ff57506001610c9684846112e1565b61ffff16149392505050565b610caa610f4a565b73ffffffffffffffffffffffffffffffffffffffff8116610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104ef565b6106b5816110e3565b610504610d9883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061133292505050565b610da2848461133d565b610dda610daf868661133d565b61019189897f0000000000000000000000000000000000000000000000000000000000000000611360565b610151610de787876113b1565b899089906113c3565b80471015610e5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016104ef565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610eb4576040519150601f19603f3d011682016040523d82523d6000602084013e610eb9565b606091505b50509050806108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016104ef565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104ef565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f04d55a8be181fb8d75b76f2d48aa0b2ee40f47e53d6e61763eeeec46feea8a249060200160405180910390a150565b600054610100900460ff166110db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104ef565b610b68611415565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8481168083526bffffffffffffffffffffffff858116602080860182815263ffffffff8b16600081815260658452899020975191519094167401000000000000000000000000000000000000000002951694909417909455845190815291820152918201527f676a23191c2989bd7cc8446122cca792bcdaa0f2d6bbd9c30d8ca031ca946343906060016108a1565b60606000611214836114b5565b600101905060008167ffffffffffffffff81111561123457611234611aa9565b6040519080825280601f01601f19166020018201604052801561125e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461126857509392505050565b6000610c776112d4848461133d565b6103cc610daf868661133d565b60006112ee816002611ad8565b60ff1682101561130057506000610702565b8260008361130f826002611ad8565b60ff169261131f93929190611af1565b61132891611b1b565b60f01c9392505050565b805160209091012090565b600061134d602d60298486611af1565b61135691611b63565b60e01c9392505050565b600061136e60226020611ad8565b60ff1683101561137f5750806113aa565b8360228461138e826020611ad8565b60ff169261139e93929190611af1565b6113a791611ba9565b90505b9392505050565b60006106ff6113c08484611597565b90565b60006113d160426014611ad8565b60ff168310156113e25750806113aa565b836042846113f1826014611ad8565b60ff169261140193929190611af1565b61140a91611be5565b60601c949350505050565b600054610100900460ff166114ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104ef565b610b68336110e3565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106114fe577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061152a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061154857662386f26fc10000830492506010015b6305f5e1008310611560576305f5e100830492506008015b612710831061157457612710830492506004015b60648310611586576064830492506002015b600a83106107025760010192915050565b60006115a7602960098486611af1565b6106ff91611ba9565b60008083601f8401126115c257600080fd5b50813567ffffffffffffffff8111156115da57600080fd5b6020830191508360208285010111156115f257600080fd5b9250929050565b6000806000806040858703121561160f57600080fd5b843567ffffffffffffffff8082111561162757600080fd5b611633888389016115b0565b9096509450602087013591508082111561164c57600080fd5b50611659878288016115b0565b95989497509550505050565b803563ffffffff8116811461167957600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106b557600080fd5b600080600080608085870312156116b657600080fd5b843593506116c660208601611665565b92506040850135915060608501356116dd8161167e565b939692955090935050565b6000602082840312156116fa57600080fd5b81356113aa8161167e565b6000806040838503121561171857600080fd5b61172183611665565b946020939093013593505050565b60006020828403121561174157600080fd5b6106ff82611665565b6000806040838503121561175d57600080fd5b82356117688161167e565b915060208301356117788161167e565b809150509250929050565b6000806020838503121561179657600080fd5b823567ffffffffffffffff808211156117ae57600080fd5b818501915085601f8301126117c257600080fd5b8135818111156117d157600080fd5b8660206060830285010111156117e657600080fd5b60209290920196919550909350505050565b6000806020838503121561180b57600080fd5b823567ffffffffffffffff81111561182257600080fd5b61182e858286016115b0565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107025761070261183a565b808201808211156107025761070261183a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156118d057600080fd5b81356bffffffffffffffffffffffff811681146113aa57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361191d5761191d61183a565b5060010190565b60005b8381101561193f578181015183820152602001611927565b50506000910152565b7f436f6e666967757265642049475020646f65736e277420737570706f7274206481527f6f6d61696e2000000000000000000000000000000000000000000000000000006020820152600082516119a6816026850160208701611924565b9190910160260192915050565b60208152600082518060208401526119d2816040850160208701611924565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b80516fffffffffffffffffffffffffffffffff8116811461167957600080fd5b60008060408385031215611a3757600080fd5b611a4083611a04565b9150611a4e60208401611a04565b90509250929050565b80820281158282048414176107025761070261183a565b600082611aa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60ff81811683821601908111156107025761070261183a565b60008085851115611b0157600080fd5b83861115611b0e57600080fd5b5050820193919092039150565b7fffff0000000000000000000000000000000000000000000000000000000000008135818116916002851015611b5b5780818660020360031b1b83161692505b505092915050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611b5b5760049490940360031b84901b1690921692915050565b80356020831015610702577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015611b5b5760149490940360031b84901b169092169291505056fea2646970667358221220fdda3c78f6dc912af2473cceef0982b6afef5d4a859a6a6158f1fe0b8389f18c64736f6c63430008130033