0x60806040523480156200001157600080fd5b506040516200285138038062002851833981810160405281019062000037919062000180565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620001b2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000148826200011b565b9050919050565b6200015a816200013b565b81146200016657600080fd5b50565b6000815190506200017a816200014f565b92915050565b60006020828403121562000199576200019862000116565b5b6000620001a98482850162000169565b91505092915050565b61268f80620001c26000396000f3fe60806040526004361061007f5760003560e01c8063be4b17721161004e578063be4b177214610139578063d0a284f714610162578063dc09c3e41461018b578063debfda30146101c857610086565b80631865c57d1461008b5780631ecd9cd8146100bc57806361461954146100f95780636e1405cb1461011057610086565b3661008657005b600080fd5b34801561009757600080fd5b506100a0610205565b6040516100b3979695949392919061185f565b60405180910390f35b3480156100c857600080fd5b506100e360048036038101906100de919061194b565b6103c0565b6040516100f091906119b3565b60405180910390f35b34801561010557600080fd5b5061010e6104fb565b005b34801561011c57600080fd5b5061013760048036038101906101329190611aa6565b6106b0565b005b34801561014557600080fd5b50610160600480360381019061015b9190611ba1565b6109e3565b005b34801561016e57600080fd5b5061018960048036038101906101849190611be1565b610a80565b005b34801561019757600080fd5b506101b260048036038101906101ad919061194b565b610b58565b6040516101bf91906119b3565b60405180910390f35b3480156101d457600080fd5b506101ef60048036038101906101ea9190611c0e565b610c94565b6040516101fc91906119b3565b60405180910390f35b6000806000806060806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900460ff1660076008600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682805480602002602001604051908101604052809291908181526020016000905b82821015610317578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906102d1565b50505050925081805461032990611c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461035590611c6a565b80156103a25780601f10610377576101008083540402835291602001916103a2565b820191906000526020600020905b81548152906001019060200180831161038557829003601f168201915b50505050509150965096509650965096509650965090919293949596565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611d0e565b60405180910390fd5b60005b838390508110156104f057600180600086868581811061047757610476611d2e565b5b905060200201602081019061048c9190611c0e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806104e890611d8c565b915050610454565b506001905092915050565b60011515600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461058e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058590611e47565b60405180910390fd5b600780549050600260009054906101000a900460ff1660ff16106105e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105de90611eb3565b60405180910390fd5b60006007600260009054906101000a900460ff1660ff168154811061060f5761060e611d2e565b5b906000526020600020906002020160000154905060006007600260009054906101000a900460ff1660ff168154811061064b5761064a611d2e565b5b90600052602060002090600202016001015490506106698282610cea565b6106745750506106ae565b6001600260008282829054906101000a900460ff166106939190611ed3565b92506101000a81548160ff021916908360ff16021790555050505b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073590611d0e565b60405180910390fd5b6000600260006101000a81548160ff021916908360ff16021790555087600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007600061082b9190611584565b60005b8585905081101561089e57600786868381811061084e5761084d611d2e565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610889919061200e565b5050808061089690611d8c565b91505061082e565b508282600891906108b09291906115a8565b5080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109d9576109d8600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611142565b5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890611d0e565b60405180910390fd5b610a7c813384611291565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590611d0e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b54573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090611d0e565b60405180910390fd5b60005b83839050811015610c8957600060016000868685818110610c1057610c0f611d2e565b5b9050602002016020810190610c259190611c0e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c8190611d8c565b915050610bec565b506001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600267ffffffffffffffff811115610d0857610d0761201c565b5b604051908082528060200260200182016040528015610d365781602001602082028036833780820191505090505b509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610d7057610d6f611d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610de157610de0611d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fe957600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168660088786600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661270f42610f05919061204b565b604051602401610f18949392919061216e565b60405160208183030381529060405290604051610f359190612259565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f9791906122b7565b60006040518083038185875af1925050503d8060008114610fd4576040519150601f19603f3d011682016040523d82523d6000602084013e610fd9565b606091505b509150915081935050505061113c565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166008878786600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661270f4261105b919061204b565b60405160240161106f9594939291906122ce565b6040516020818303038152906040529060405161108c9190612259565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110ee91906122b7565b6000604051808303816000865af19150503d806000811461112b576040519150601f19603f3d011682016040523d82523d6000602084013e611130565b606091505b50915091508193505050505b92915050565b60008114806111cc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611189929190612328565b602060405180830381865afa1580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190612366565b145b61120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290612405565b60405180910390fd5b61128c8363095ea7b360e01b848460405160240161122a929190612425565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611317565b505050565b6113128363a9059cbb60e01b84846040516024016112b0929190612425565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611317565b505050565b6000611379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113de9092919063ffffffff16565b90506000815111156113d95780806020019051810190611399919061247a565b6113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90612519565b60405180910390fd5b5b505050565b60606113ed84846000856113f6565b90509392505050565b60608247101561143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906125ab565b60405180910390fd5b6114448561150a565b611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90612617565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114ac91906122b7565b60006040518083038185875af1925050503d80600081146114e9576040519150601f19603f3d011682016040523d82523d6000602084013e6114ee565b606091505b50915091506114fe82828661151d565b92505050949350505050565b600080823b905060008111915050919050565b6060831561152d5782905061157d565b6000835111156115405782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115749190612637565b60405180910390fd5b9392505050565b50805460008255600202906000526020600020908101906115a5919061162e565b50565b8280546115b490611c6a565b90600052602060002090601f0160209004810192826115d6576000855561161d565b82601f106115ef57803560ff191683800117855561161d565b8280016001018555821561161d579182015b8281111561161c578235825591602001919060010190611601565b5b50905061162a9190611655565b5090565b5b808211156116515760008082016000905560018201600090555060020161162f565b5090565b5b8082111561166e576000816000905550600101611656565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061169d82611672565b9050919050565b6116ad81611692565b82525050565b600060ff82169050919050565b6116c9816116b3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61170e816116fb565b82525050565b60408201600082015161172a6000850182611705565b50602082015161173d6020850182611705565b50505050565b600061174f8383611714565b60408301905092915050565b6000602082019050919050565b6000611773826116cf565b61177d81856116da565b9350611788836116eb565b8060005b838110156117b95781516117a08882611743565b97506117ab8361175b565b92505060018101905061178c565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118005780820151818401526020810190506117e5565b8381111561180f576000848401525b50505050565b6000601f19601f8301169050919050565b6000611831826117c6565b61183b81856117d1565b935061184b8185602086016117e2565b61185481611815565b840191505092915050565b600060e082019050611874600083018a6116a4565b61188160208301896116a4565b61188e60408301886116a4565b61189b60608301876116c0565b81810360808301526118ad8186611768565b905081810360a08301526118c18185611826565b90506118d060c08301846116a4565b98975050505050505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261190b5761190a6118e6565b5b8235905067ffffffffffffffff811115611928576119276118eb565b5b602083019150836020820283011115611944576119436118f0565b5b9250929050565b60008060208385031215611962576119616118dc565b5b600083013567ffffffffffffffff8111156119805761197f6118e1565b5b61198c858286016118f5565b92509250509250929050565b60008115159050919050565b6119ad81611998565b82525050565b60006020820190506119c860008301846119a4565b92915050565b6119d781611692565b81146119e257600080fd5b50565b6000813590506119f4816119ce565b92915050565b60008083601f840112611a1057611a0f6118e6565b5b8235905067ffffffffffffffff811115611a2d57611a2c6118eb565b5b602083019150836040820283011115611a4957611a486118f0565b5b9250929050565b60008083601f840112611a6657611a656118e6565b5b8235905067ffffffffffffffff811115611a8357611a826118eb565b5b602083019150836001820283011115611a9f57611a9e6118f0565b5b9250929050565b60008060008060008060008060c0898b031215611ac657611ac56118dc565b5b6000611ad48b828c016119e5565b9850506020611ae58b828c016119e5565b9750506040611af68b828c016119e5565b965050606089013567ffffffffffffffff811115611b1757611b166118e1565b5b611b238b828c016119fa565b9550955050608089013567ffffffffffffffff811115611b4657611b456118e1565b5b611b528b828c01611a50565b935093505060a0611b658b828c016119e5565b9150509295985092959890939650565b611b7e816116fb565b8114611b8957600080fd5b50565b600081359050611b9b81611b75565b92915050565b60008060408385031215611bb857611bb76118dc565b5b6000611bc685828601611b8c565b9250506020611bd7858286016119e5565b9150509250929050565b600060208284031215611bf757611bf66118dc565b5b6000611c0584828501611b8c565b91505092915050565b600060208284031215611c2457611c236118dc565b5b6000611c32848285016119e5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c8257607f821691505b60208210811415611c9657611c95611c3b565b5b50919050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cf86022836117d1565b9150611d0382611c9c565b604082019050919050565b60006020820190508181036000830152611d2781611ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d97826116fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611dca57611dc9611d5d565b5b600182019050919050565b7f4f6e6c79204578656375746f72206d61792063616c6c2074686973206d65746860008201527f6f64000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e316022836117d1565b9150611e3c82611dd5565b604082019050919050565b60006020820190508181036000830152611e6081611e24565b9050919050565b7f636f756e746572206f766572666c6f7700000000000000000000000000000000600082015250565b6000611e9d6010836117d1565b9150611ea882611e67565b602082019050919050565b60006020820190508181036000830152611ecc81611e90565b9050919050565b6000611ede826116b3565b9150611ee9836116b3565b92508260ff03821115611eff57611efe611d5d565b5b828201905092915050565b60008135611f1781611b75565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f5984611f20565b9350801983169250808416831791505092915050565b6000819050919050565b6000611f94611f8f611f8a846116fb565b611f6f565b6116fb565b9050919050565b6000819050919050565b611fae82611f79565b611fc1611fba82611f9b565b8354611f2d565b8255505050565b600081016000830180611fda81611f0a565b9050611fe68184611fa5565b505050600181016020830180611ffb81611f0a565b90506120078184611fa5565b5050505050565b6120188282611fc8565b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000612056826116fb565b9150612061836116fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561209657612095611d5d565b5b828201905092915050565b6120aa816116fb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120e581611692565b82525050565b60006120f783836120dc565b60208301905092915050565b6000602082019050919050565b600061211b826120b0565b61212581856120bb565b9350612130836120cc565b8060005b8381101561216157815161214888826120eb565b975061215383612103565b925050600181019050612134565b5085935050505092915050565b600060808201905061218360008301876120a1565b81810360208301526121958186612110565b90506121a460408301856116a4565b6121b160608301846120a1565b95945050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546121e781611c6a565b6121f181866121ba565b9450600182166000811461220c576001811461221d57612250565b60ff19831686528186019350612250565b612226856121c5565b60005b8381101561224857815481890152600182019150602081019050612229565b838801955050505b50505092915050565b600061226582846121da565b915081905092915050565b600081519050919050565b600081905092915050565b600061229182612270565b61229b818561227b565b93506122ab8185602086016117e2565b80840191505092915050565b60006122c38284612286565b915081905092915050565b600060a0820190506122e360008301886120a1565b6122f060208301876120a1565b81810360408301526123028186612110565b905061231160608301856116a4565b61231e60808301846120a1565b9695505050505050565b600060408201905061233d60008301856116a4565b61234a60208301846116a4565b9392505050565b60008151905061236081611b75565b92915050565b60006020828403121561237c5761237b6118dc565b5b600061238a84828501612351565b91505092915050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b60006123ef6036836117d1565b91506123fa82612393565b604082019050919050565b6000602082019050818103600083015261241e816123e2565b9050919050565b600060408201905061243a60008301856116a4565b61244760208301846120a1565b9392505050565b61245781611998565b811461246257600080fd5b50565b6000815190506124748161244e565b92915050565b6000602082840312156124905761248f6118dc565b5b600061249e84828501612465565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612503602a836117d1565b915061250e826124a7565b604082019050919050565b60006020820190508181036000830152612532816124f6565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006125956026836117d1565b91506125a082612539565b604082019050919050565b600060208201905081810360008301526125c481612588565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612601601d836117d1565b915061260c826125cb565b602082019050919050565b60006020820190508181036000830152612630816125f4565b9050919050565b600060208201905081810360008301526126518184611826565b90509291505056fea2646970667358221220d6bb29df4f3210bc30f043348759100d2af4e5a3fa3d18d9234eb0584a11551964736f6c634300080a0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2