0x60806040523480156200001157600080fd5b506040518060400160405280601181526020017f5765696768206a6f696e207468726f61740000000000000000000000000000008152506040518060400160405280600381526020017f574a54000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b6125c6806200041b6000396000f3fe6080604052600436106100dd5760003560e01c80636a6278421161007f578063a22cb46511610059578063a22cb465146102d7578063b88d4fde14610300578063c87b56dd14610329578063e985e9c514610366576100dd565b80636a6278421461023f57806370a082311461026f57806395d89b41146102ac576100dd565b8063095ea7b3116100bb578063095ea7b31461018757806323b872dd146101b057806342842e0e146101d95780636352211e14610202576100dd565b806301ffc9a7146100e257806306fdde031461011f578063081812fc1461014a575b600080fd5b3480156100ee57600080fd5b50610109600480360381019061010491906118c2565b6103a3565b604051610116919061190a565b60405180910390f35b34801561012b57600080fd5b50610134610485565b60405161014191906119b5565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190611a0d565b610517565b60405161017e9190611a7b565b60405180910390f35b34801561019357600080fd5b506101ae60048036038101906101a99190611ac2565b61055d565b005b3480156101bc57600080fd5b506101d760048036038101906101d29190611b02565b610674565b005b3480156101e557600080fd5b5061020060048036038101906101fb9190611b02565b6106d4565b005b34801561020e57600080fd5b5061022960048036038101906102249190611a0d565b6106f4565b6040516102369190611a7b565b60405180910390f35b61025960048036038101906102549190611b55565b61077a565b6040516102669190611b91565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190611b55565b6107a7565b6040516102a39190611b91565b60405180910390f35b3480156102b857600080fd5b506102c161085e565b6040516102ce91906119b5565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190611bd8565b6108f0565b005b34801561030c57600080fd5b5061032760048036038101906103229190611d4d565b610906565b005b34801561033557600080fd5b50610350600480360381019061034b9190611a0d565b610968565b60405161035d91906119b5565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190611dd0565b6109d0565b60405161039a919061190a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061046e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061047e575061047d82610a64565b5b9050919050565b60606000805461049490611e3f565b80601f01602080910402602001604051908101604052809291908181526020018280546104c090611e3f565b801561050d5780601f106104e25761010080835404028352916020019161050d565b820191906000526020600020905b8154815290600101906020018083116104f057829003601f168201915b5050505050905090565b600061052282610ace565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610568826106f4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf90611ee2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105f7610b19565b73ffffffffffffffffffffffffffffffffffffffff161480610626575061062581610620610b19565b6109d0565b5b610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90611f74565b60405180910390fd5b61066f8383610b21565b505050565b61068561067f610b19565b82610bda565b6106c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bb90612006565b60405180910390fd5b6106cf838383610c6f565b505050565b6106ef83838360405180602001604052806000815250610906565b505050565b60008061070083610f68565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890612072565b60405180910390fd5b80915050919050565b60006107866006610fa5565b60006107926006610fbb565b905061079e8382610fc9565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90612104565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461086d90611e3f565b80601f016020809104026020016040519081016040528092919081815260200182805461089990611e3f565b80156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b6109026108fb610b19565b8383610fe7565b5050565b610917610911610b19565b83610bda565b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90612006565b60405180910390fd5b61096284848484611153565b50505050565b606061097382610ace565b600061097d6111af565b9050600081511161099d57604051806020016040528060008152506109c8565b806109a7846111c6565b6040516020016109b8929190612160565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610ad781611294565b610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90612072565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b94836106f4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610be6836106f4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c285750610c2781856109d0565b5b80610c6657508373ffffffffffffffffffffffffffffffffffffffff16610c4e84610517565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610c8f826106f4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906121f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90612288565b60405180910390fd5b610d6183838360016112d5565b8273ffffffffffffffffffffffffffffffffffffffff16610d81826106f4565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906121f6565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f6383838360016112db565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b610fe38282604051806020016040528060008152506112e1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906122f4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611146919061190a565b60405180910390a3505050565b61115e848484610c6f565b61116a8484848461133c565b6111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612386565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016111d5846114c3565b01905060008167ffffffffffffffff8111156111f4576111f3611c22565b5b6040519080825280601f01601f1916602001820160405280156112265781602001600182028036833780820191505090505b509050600082602001820190505b600115611289578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161127d5761127c6123a6565b5b04945060008503611234575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166112b683610f68565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6112eb8383611616565b6112f8600084848461133c565b611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90612386565b60405180910390fd5b505050565b600061135d8473ffffffffffffffffffffffffffffffffffffffff16611833565b156114b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611386610b19565b8786866040518563ffffffff1660e01b81526004016113a8949392919061242a565b6020604051808303816000875af19250505080156113e457506040513d601f19601f820116820180604052508101906113e1919061248b565b60015b611466573d8060008114611414576040519150601f19603f3d011682016040523d82523d6000602084013e611419565b606091505b50600081510361145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590612386565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506114bb565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611521577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611517576115166123a6565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061155e576d04ee2d6d415b85acef81000000008381611554576115536123a6565b5b0492506020810190505b662386f26fc10000831061158d57662386f26fc100008381611583576115826123a6565b5b0492506010810190505b6305f5e10083106115b6576305f5e10083816115ac576115ab6123a6565b5b0492506008810190505b61271083106115db5761271083816115d1576115d06123a6565b5b0492506004810190505b606483106115fe57606483816115f4576115f36123a6565b5b0492506002810190505b600a831061160d576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90612504565b60405180910390fd5b61168e81611294565b156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590612570565b60405180910390fd5b6116dc6000838360016112d5565b6116e581611294565b15611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90612570565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461182f6000838360016112db565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61189f8161186a565b81146118aa57600080fd5b50565b6000813590506118bc81611896565b92915050565b6000602082840312156118d8576118d7611860565b5b60006118e6848285016118ad565b91505092915050565b60008115159050919050565b611904816118ef565b82525050565b600060208201905061191f60008301846118fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561195f578082015181840152602081019050611944565b60008484015250505050565b6000601f19601f8301169050919050565b600061198782611925565b6119918185611930565b93506119a1818560208601611941565b6119aa8161196b565b840191505092915050565b600060208201905081810360008301526119cf818461197c565b905092915050565b6000819050919050565b6119ea816119d7565b81146119f557600080fd5b50565b600081359050611a07816119e1565b92915050565b600060208284031215611a2357611a22611860565b5b6000611a31848285016119f8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6582611a3a565b9050919050565b611a7581611a5a565b82525050565b6000602082019050611a906000830184611a6c565b92915050565b611a9f81611a5a565b8114611aaa57600080fd5b50565b600081359050611abc81611a96565b92915050565b60008060408385031215611ad957611ad8611860565b5b6000611ae785828601611aad565b9250506020611af8858286016119f8565b9150509250929050565b600080600060608486031215611b1b57611b1a611860565b5b6000611b2986828701611aad565b9350506020611b3a86828701611aad565b9250506040611b4b868287016119f8565b9150509250925092565b600060208284031215611b6b57611b6a611860565b5b6000611b7984828501611aad565b91505092915050565b611b8b816119d7565b82525050565b6000602082019050611ba66000830184611b82565b92915050565b611bb5816118ef565b8114611bc057600080fd5b50565b600081359050611bd281611bac565b92915050565b60008060408385031215611bef57611bee611860565b5b6000611bfd85828601611aad565b9250506020611c0e85828601611bc3565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c5a8261196b565b810181811067ffffffffffffffff82111715611c7957611c78611c22565b5b80604052505050565b6000611c8c611856565b9050611c988282611c51565b919050565b600067ffffffffffffffff821115611cb857611cb7611c22565b5b611cc18261196b565b9050602081019050919050565b82818337600083830152505050565b6000611cf0611ceb84611c9d565b611c82565b905082815260208101848484011115611d0c57611d0b611c1d565b5b611d17848285611cce565b509392505050565b600082601f830112611d3457611d33611c18565b5b8135611d44848260208601611cdd565b91505092915050565b60008060008060808587031215611d6757611d66611860565b5b6000611d7587828801611aad565b9450506020611d8687828801611aad565b9350506040611d97878288016119f8565b925050606085013567ffffffffffffffff811115611db857611db7611865565b5b611dc487828801611d1f565b91505092959194509250565b60008060408385031215611de757611de6611860565b5b6000611df585828601611aad565b9250506020611e0685828601611aad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e5757607f821691505b602082108103611e6a57611e69611e10565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ecc602183611930565b9150611ed782611e70565b604082019050919050565b60006020820190508181036000830152611efb81611ebf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611f5e603d83611930565b9150611f6982611f02565b604082019050919050565b60006020820190508181036000830152611f8d81611f51565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611ff0602d83611930565b9150611ffb82611f94565b604082019050919050565b6000602082019050818103600083015261201f81611fe3565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061205c601883611930565b915061206782612026565b602082019050919050565b6000602082019050818103600083015261208b8161204f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006120ee602983611930565b91506120f982612092565b604082019050919050565b6000602082019050818103600083015261211d816120e1565b9050919050565b600081905092915050565b600061213a82611925565b6121448185612124565b9350612154818560208601611941565b80840191505092915050565b600061216c828561212f565b9150612178828461212f565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121e0602583611930565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612272602483611930565b915061227d82612216565b604082019050919050565b600060208201905081810360008301526122a181612265565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006122de601983611930565b91506122e9826122a8565b602082019050919050565b6000602082019050818103600083015261230d816122d1565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612370603283611930565b915061237b82612314565b604082019050919050565b6000602082019050818103600083015261239f81612363565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006123fc826123d5565b61240681856123e0565b9350612416818560208601611941565b61241f8161196b565b840191505092915050565b600060808201905061243f6000830187611a6c565b61244c6020830186611a6c565b6124596040830185611b82565b818103606083015261246b81846123f1565b905095945050505050565b60008151905061248581611896565b92915050565b6000602082840312156124a1576124a0611860565b5b60006124af84828501612476565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006124ee602083611930565b91506124f9826124b8565b602082019050919050565b6000602082019050818103600083015261251d816124e1565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061255a601c83611930565b915061256582612524565b602082019050919050565b600060208201905081810360008301526125898161254d565b905091905056fea2646970667358221220f905289c8f0c2605d21040440a5fc1d450ff6cb79f0dc0b7f9b3e7043146659664736f6c63430008130033